2012-09-03 15 views
6

muszę wdrożyć następujący scenariusz,jak znaleźć koniec wartości przewijania do HorizontalScrollView

tu mam dwie horizontalScrollViews górna Scrollview jest głównym menu i niższy Scrollview jest podmenu.

kiedy przewijam menu główne, menu, które znajduje się pod strzałką środkową, pokaże swoje podmenu w niższym przewijaniu, a od dolnego przewijania podmenu, które znajduje się pod strzałką środkową, pokazuje ekran dla tego podmenu.

oto moje wymaganie: enter image description here

I zostały wdrożone to przy użyciu HorizontalScrollViews i ViewFlipper a także działa, ale to daje poprawny wynik tylko wtedy przewijać ją powoli, a nie kiedy przewijać szybko.

Użyłem metody onTouch() z wydaniem ACTION_UP, więc gdy zwolnię palec z ekranu, to w tym miejscu da mi on pozycję getScrollX(), ale tutaj potrzebuję getScrollX(), kiedy przewijanie jest zakończone/zatrzymane.

oto mój kod: -

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

Odpowiedz

0

Używamy następujące podejście: utworzyć niestandardową HorizontalScrollView i zastąpić onScrollChanged (int l, int t, int oldl, int oldt) metody i kodzie idzie. dla dokładniejszej nadpisujemy również metodę rysowania.

+0

Próbowałem również, ale nie jest to, że metoda onCrollChange() daje bieżącą wartość przewijania? Potrzebuję czegoś, co da mi koniec wartości scroll.i oznacza, kiedy scroll jest finshed. nie użyłem metody draw(), spróbuję tego. – NaserShaikh

2

Oto moja odpowiedź:

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

} 

Oto aktywności:

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

        } 

     }); 
Powiązane problemy