2011-09-28 13 views
5

मैं ListView में किसी विशिष्ट स्थिति पर स्क्रॉल करने के लिए smoothScrollBy() का उपयोग कर रहा हूं। मैं ListView को वर्तमान onScrollStateChanged() ईवेंट के साथ एकीकृत करने के लिए स्क्रॉलिंग कर रहा हूं, जब उपयोगकर्ता अपनी अंगुली से स्क्रॉल करता है तो निकाल दिया जाता है।एंड्रॉइड चिकनी स्क्रॉल करने के लिए स्क्रॉलस्टेट पर क्लिक नहीं किया गया

वर्तमान में मैं Timer का उपयोग कर रहा हूं जो चिकनी स्क्रॉल की अवधि के बाद 100ms चलाता है, लेकिन यह उतना ही नहीं है जितना कि मैं पसंद करूंगा।

+1

मैं अपने खुद के डिबगिंग कि 'SmoothScroll *' कार्यों स्क्रॉल स्थिति परिवर्तन ट्रिगर नहीं करेगा, और इसलिए प्रस्तुत करना 'OnScrollListener.onScrollStateChanged()' बेकार कॉलबैक से इस बात की पुष्टि कर सकते हैं। – ohhorob

उत्तर

2

यदि आपने अपनी सूचीदृश्य के लिए ऑनस्क्रॉल लिस्टर को कार्यान्वित किया है तो आप स्क्रॉलस्टेट बदलते समय देख सकते हैं। जब आप smoothScrollBy() को कॉल करते हैं तो एक वैश्विक बूलियन (isScrolling) सत्य पर सेट करें और फिर ऑनक्रॉल लिस्टनर SCROLL_STATE_IDLE के स्क्रॉलस्टेट को पंजीकृत करने के बाद इसे गलत पर सेट करें।

sidebar1.smoothScrollToPositionFromTop(currentPosition, 0, 500); 
isScrolling = true; 

sidebar1.setOnScrollListener(new OnScrollListener() { 

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
     isScrolling = false; 
    } 

} 

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 

} 
}); 
+0

दुर्भाग्य से 'smoothScrollToPositionFromTop' एपीआई 11 में आया था। – styler1972

+0

सच है, लेकिन स्क्रॉलिंग होने पर आपको अधिसूचित होने की आवश्यकता नहीं है? आपको smoothScrollBy का उपयोग करने में सक्षम होना चाहिए और श्रोता को थोड़ी देर के साथ संयोजन में कार्यान्वित करना चाहिए जो निरंतर स्टेटसोलिंग स्थिति का चुनाव करता है। – saulpower

+2

मेरे अनुभव से, 'smoothScrollBy() '' स्क्रॉलस्टेट चेंज()' पर नहीं आती है, और इस समय तक स्क्रॉलिंग के बाद मैं मतदान के लिए 'टाइमर' का उपयोग कर रहा हूं। – styler1972

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