2012-09-03 14 views
6

Ende des Scroll-Wert finden i folgende Szenario implementieren müssen,wie für HorizontalScrollView

hier habe ich zwei horizontalScrollViews die obere Scrollview ist ein Hauptmenü und unteren Scrollview ist ein Untermenü.

Wenn ich im Hauptmenü blättern gehe, wird das Menü, das unter dem mittleren Pfeil erscheint, sein Untermenü in der unteren Bildlaufansicht anzeigen und von der unteren Bildlaufansicht aus erscheint das Untermenü unter dem mittleren Pfeil.

hier ist meine Forderung: enter image description here

i implementiert habe es HorizontalScrollViews und ViewFlipper verwenden und es funktioniert auch, aber es wird korrektes Ergebnis gibt nur, wenn ich es langsam bewegen und nicht, wenn Scroll schnell.

Ich habe die onTouch() -Methode mit einem ACTION_UP-Ereignis verwendet. Wenn ich den Finger vom Bildschirm loslasse, erhält ich die Position getScrollX(), aber hier muss die Position getScrollX() sein, wenn der Bildlauf abgeschlossen ist.

hier ist mein Code: -

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

Antwort

0

Wir Ansatz verwenden, folgende: eine benutzerdefinierte HorizontalScrollView erstellen und außer Kraft setzen onScrollChanged (int l, int t, int oLDL, int oldt) Methode und der Code dort geht. für genauere wir Override-Methode auch.

+0

Ich habe auch versucht, aber ist das onSCrollChange() -Methode gibt aktuellen Scroll-Wert? Ich brauche etwas, das mir das Ende von scroll value.i bedeutet, wenn scroll fertig ist. Ich habe die draw() Methode nicht benutzt, ich werde es versuchen. – NaserShaikh

2

Hier ist meine Antwort:

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

} 

Hier in Aktivität:

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

        } 

     }); 
Verwandte Themen