2012-09-03 11 views
6

के लिए स्क्रॉल मूल्य के अंत मैं परिदृश्य निम्नलिखित लागू करने की आवश्यकता को खोजने के लिए,कैसे HorizontalScrollView

यहाँ मैं दो horizontalScrollViews है ऊपरी scrollview एक मुख्य मेनू है और कम scrollview एक सबमेनू है।

जब मैं मुख्य मेनू स्क्रॉल करता हूं, मेनू तीर के नीचे आता है जो मेनू नीचे निचले स्क्रॉलव्यू में और निचले स्क्रॉलव्यू से दिखाएगा, उपमेनू जो केंद्र तीर के नीचे आता है उस उप-मेनू के लिए स्क्रीन दिखाता है। enter image description here

मैं इसे HorizontalScrollViews और ViewFlipper का उपयोग कर और भी यह काम करता है, लेकिन यह सही परिणाम केवल जब मैं यह धीरे धीरे और नहीं स्क्रॉल जब स्क्रॉल तेजी से दे देंगे क्रियान्वित किया है:

यहाँ मेरी आवश्यकता है।

मैंने ACTION_UP ईवेंट के साथ टच() विधि का उपयोग किया है, इसलिए जब मैं स्क्रीन से उंगली जारी करता हूं तो यह मुझे उस बिंदु पर स्क्रॉलएक्स() स्थिति देता है, लेकिन यहां स्क्रॉल समाप्त होने/बंद होने पर मुझे getScrollX() स्थिति की आवश्यकता होती है।

यहाँ मेरी कोड है: -

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (v.getId()) { 

      case R.id.mHorizontalScrollViewMain: 
      if (event.getAction() == KeyEvent.ACTION_UP) { 
      Log.d("test", " " + hsvUpperTab.getScrollX() + " , "+ mViewFlipper.getChildCount()); 
      getUpperTabScrolled(hsvUpperTab.getScrollX()); 
     } 
     break; 

     case R.id.mHorizontalScrollViewSub: 
       if (event.getAction() == KeyEvent.ACTION_UP) { 
      Log.d("test1", " " + hsvLowerTab.getScrollX()); 
      getLowerTabScrolled(hsvLowerTab.getScrollX()); 

      } 

     default: 
      break; 

     } 

     return false; 
    } 

उत्तर

0

हम दृष्टिकोण निम्नलिखित का उपयोग करें: एक कस्टम HorizontalScrollView बना सकते हैं और onScrollChanged ओवरराइड (int एल, पूर्णांक टी, पूर्णांक oldl, पूर्णांक oldt) विधि और अपने कोड वहाँ चला जाता है। अधिक सटीक के लिए हम ड्रॉ विधि को ओवरराइड भी करते हैं।

+0

मैंने यह भी कोशिश की है लेकिन यह नहीं है कि onSCrollChange() विधि वर्तमान स्क्रॉलिंग मान देता है? मुझे कुछ ऐसा चाहिए जो मुझे स्क्रॉल वैल्यू का अंत दे। मेरा मतलब है जब स्क्रॉल खत्म हो जाता है। मैंने draw() विधि का उपयोग नहीं किया, मैं इसे आजमाउंगा। – NaserShaikh

2

यहाँ के साथ getScrollY() की जगह है मेरा उत्तर है:

public class ScrollViewCustom extends HorizontalScrollView { 
    private Runnable scrollerTask; 
    private int intitPosition; 
    private int newCheck = 100; 
    private static final String TAG = "ScrollView"; 

    public interface onScrollStopListner{ 
     void onScrollStoped(); 
    } 

    private onScrollStopListner onScrollstopListner; 

    public ScrollViewCustom(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
      scrollerTask = new Runnable() { 
       @Override 
       public void run() { 
       // TODO Auto-generated method stub 
        int newPosition = getScrollX(); 
         if (intitPosition - newPosition == 0) { 
          if (onScrollstopListner != null) { 
          onScrollstopListner.onScrollStoped(); 
          } 
          }else{ 
          intitPosition = getScrollX(); 
          ScrollViewCustom.this.postDelayed(scrollerTask, newCheck); 
         } 
        } 
     }; 
    } 

    public void setOnScrollStopListner(ScrollViewCustom.onScrollStopListner listner){ 
     onScrollstopListner = listner; 
    } 

    public void startScrollerTask(){ 
     intitPosition = getScrollX(); 
     ScrollViewCustom.this.postDelayed(scrollerTask, newCheck); 
    } 

} 

यहाँ गतिविधि में है:

scroll.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
         if (event.getAction() == MotionEvent.ACTION_UP) { 
          scroll.startScrollerTask(); 
         } 
         return false; 
      } 
     }); 



     scroll.setOnScrollStopListner(new onScrollStopListner() { 
       @Override 
       public void onScrollStoped() { 
        // TODO Auto-generated method stub 
        Log.d(TAG," "+scroll.getScrollX()); 

        } 

     });