2010-05-19 18 views
14

मेरे पास एक स्क्रॉलव्यू है और मैं केवल एक ईवेंट चाहता हूं यदि यह पहले से नीचे स्क्रॉल हो गया है लेकिन मुझे यह देखने का कोई तरीका नहीं मिल रहा है कि स्क्रॉलव्यू नीचे है या नहीं।मुझे कैसे पता चलेगा कि स्क्रॉलव्यू पहले से नीचे स्क्रॉल किया गया है?

मैंने इसे विपरीत के लिए हल किया है; केवल यदि वह पहले से शीर्ष करने के लिए स्क्रॉल किया है घटना होने की अनुमति देते हैं:

ScrollView sv = (ScrollView) findViewById(R.id.Scroll); 
    if(sv.getScrollY() == 0) { 
     //do something 
    } 
    else { 
     //do nothing 
    } 

उत्तर

8

मुझे इसे काम करने का एक तरीका मिला। मुझे स्क्रॉलव्यू में बच्चे की मापा ऊंचाई की जांच करने की आवश्यकता थी, इस मामले में एक लाइनरलाउट। मैं < = का उपयोग करता हूं क्योंकि स्क्रॉलिंग आवश्यक होने पर भी कुछ करना चाहिए। अर्थात। जब LinearLayout स्क्रॉलव्यू के रूप में उच्च नहीं है। उन मामलों में getScrollY हमेशा 0.

ScrollView scrollView = (ScrollView) findViewById(R.id.ScrollView); 
    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.LinearLayout); 
    if(linearLayout.getMeasuredHeight() <= scrollView.getScrollY() + 
      scrollView.getHeight()) { 
     //do something 
    } 
    else { 
     //do nothing 
    } 
+2

स्क्रॉलव्यू के रूप में केवल एक बच्चा हो सकता है, जहां आप निश्चित हैं कि एक है: यदि (scrollView.getScrollY() + scrollView.getHeight()> = scrollView.getChildAt (0) .getMeasuredHeight()) {/ * स्क्रॉल किया गया है नीचे * /} – Tom

+0

क्या यह एक विधि में रखा गया था? यह कोड कैसे लागू किया गया था? –

+0

@ItzHoudini मैंने इसे यथासंभव सामान्य बना दिया ताकि आप इसे किसी भी तरह से उपयोग कर सकें। – sanna

0

scrollView.getHeight() == scrollView.getScrollY + screensize, तो यह नीचे करने के लिए स्क्रॉल किया जाता है।

+1

धन्यवाद, लेकिन जब स्क्रॉल नीचे getScrollY = 349 getBottom = 430 getMeasuredHeight = 430 getHeight = 430 पर है पिछले तीन हैं इससे कोई फर्क नहीं पड़ता कि मैंने कितनी दूर स्क्रॉल किया है। एकमात्र चीज जो भिन्न होती है वह है स्क्रॉलवाई। इस स्क्रीनसाइज का आप क्या उल्लेख करते हैं? क्या मैंने इसे मिसिनरेट किया? इस मामले में यह 81 होना चाहिए और मैं ऐसा कुछ भी नहीं सोच सकता। – sanna

1

आप लंबवत स्क्रॉल विचारों

5

के लिए इस

int maxScroll = yourScrollView.getChildAt(0).getMeasuredWidth() - yourScrollView.getWidth(); 

परिवर्तन getWidth() getHeight करने के लिए() करके चौड़ाई के लिए अधिकतम पुस्तक प्राप्त कर सकते है यहां यह है:

public class myScrollView extends ScrollView 
{ 
    public myScrollView(Context context) 
    { 
     super(context); 
    } 
    public myScrollView(Context context, AttributeSet attributeSet) 
    { 
     super(context,attributeSet); 
    } 

    @Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) 
    { 
     View view = (View)getChildAt(getChildCount()-1); 
     int d = view.getBottom(); 
     d -= (getHeight()+getScrollY()); 
     if(d==0) 
     { 
      //you are at the end of the list in scrollview 
      //do what you wanna do here 
     } 
     else 
      super.onScrollChanged(l,t,oldl,oldt); 
    } 
} 

आप या तो xSl लेआउट में myScrollView का उपयोग कर सकते हैं या इसे yo में तुरंत चालू कर सकते हैं आपका कोड संकेत: उपरोक्त कोड के साथ यदि उपयोगकर्ता 10 बार बार सूची के अंत में हिट करता है तो आपका कोड 10 बार चलाएगा। कुछ मामलों में जब आप अपनी सूची को अपडेट करने के लिए दूरस्थ सर्वर से डेटा लोड करना चाहते हैं, तो वह व्यवहार अवांछित होगा (संभवतः)। अवांछित स्थिति की भविष्यवाणी करने और उनसे बचने की कोशिश करें।

संकेत 2: कभी-कभी सूची के अंत तक पहुंचने से आपकी स्क्रिप्ट चलाने के लिए सही समय हो सकता है। उदाहरण के लिए उपयोगकर्ता लेखों की एक सूची पढ़ रहा है और अंत के करीब हो रहा है। फिर आप सूची खत्म होने से पहले लोड करना शुरू कर देते हैं। ऐसा करने के लिए, बस अपने उद्देश्य को पूरा करने के लिए इस कार्य करें:

if(d<=SOME_THRESHOLD) {} 
+0

धन्यवाद: डी, ​​मेरे पास हेडकेश के साथ अच्छा समय था – rkmax

संबंधित मुद्दे