2012-09-03 7 views
6

ho bisogno di implementare seguente scenario,come trovare fine del valore di scorrimento per HorizontalScrollView

qui ho due horizontalScrollViews la ScrollView superiore è un menu principale e più bassa ScrollView è un sottomenu.

quando si scorre il menu principale, il menu che si trova sotto la freccia centrale mostrerà il suo sottomenu in basso scrollview e dalla finestra di scorrimento inferiore, il sottomenu che si trova sotto la freccia centrale mostra la schermata per quel sottomenu.

ecco la mia richiesta: enter image description here

Ho implementato utilizzando HorizontalScrollViews e ViewFlipper e anche funziona ma vi darà risultato corretto solo quando ho scorrere lentamente e non quando scorrimento veloce.

ho usato il metodo onTouch() con un evento ACTION_UP, quindi quando rilascio il dito dallo schermo mi darà la posizione getScrollX() a quel punto, ma qui ho bisogno di getScrollX() posizione quando lo scorrimento è finito/stop.

ecco il mio codice: -

@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; 
    } 

risposta

0

Usiamo seguente approccio: creare un HorizontalScrollView personalizzato e sovrascrivere onScrollChanged (int l, int t, int Oldl, int oldt) il metodo e il codice va là. per una maggiore precisione, sostituiamo anche il metodo di disegno.

+0

ho provato anche quello ma non è che il metodo onSCrollChange() fornisce il valore di scorrimento corrente? ho bisogno di qualcosa che mi dia il valore di fine dello scroll. Voglio dire quando lo scorrimento è finito. Non ho usato il metodo draw(), ci proverò. – NaserShaikh

2

Ecco la mia risposta:

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); 
    } 

} 

è in attività Qui:

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()); 

        } 

     }); 
Problemi correlati