2016-07-31 21 views
-1

HorizontalScrollViewでスクロールの状態にアクセスする必要があります。どのように可能ですか?あなたは以下のようなカスタマイズを作成することができますscrollviewでHorizo​​ntalScrollViewのスクロール状態を確認する方法は?

horizontalScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 

      @Override 
      public void onScrollChanged() { 

       // .. some code need here 
      } 
     }); 
+0

あなたが投稿したコードはありますか?問題はどこだ? – Lino

答えて

1

、私はあなたにもそのようなカスタムhorizo​​ntalScrollViewを作成することができると思いますか?

public class ScrollViewWithListener extends ScrollView{ 

    private boolean mCurrentlyTouching; 
    private boolean mCurrentlyFling; 

    public interface ScrollViewListener { 
     public void onScrollChanged(ScrollViewWithListener scrollView, int x, int y, int oldx, int oldy); 
     public void onEndScroll(); 
    } 

    private ScrollViewListener scrollViewListener = null; 

    public ScrollViewWithListener(Context context) { 
     super(context); 
    } 

    public ScrollViewWithListener(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public ScrollViewWithListener(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void setScrollViewListener(ScrollViewListener scrollViewListener) { 
     this.scrollViewListener = scrollViewListener; 
    } 

    @Override 
    public void fling(int velocityY) { 
     super.fling(velocityY); 
     mCurrentlyFling = true; 
    } 

    @Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
     super.onScrollChanged(l, t, oldl, oldt); 
     if (scrollViewListener != null) { 
      scrollViewListener.onScrollChanged(this, l, t, oldl, oldt); 
     } 

     if (Math.abs(t - oldt) < 2 || t >= getMeasuredHeight() || t == 0) { 
      if(!mCurrentlyTouching){ 
       if (scrollViewListener != null) { 
        Log.d("SCROLL WITH LISTENER", "-- OnEndScroll"); 
        scrollViewListener.onEndScroll(); 
       } 
      } 
      mCurrentlyFling = false; 
     } 

    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      mCurrentlyTouching = true; 
      break; 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_CANCEL: 
      mCurrentlyTouching = false; 
      if(!mCurrentlyFling){ 
       if (scrollViewListener != null) { 
        Log.d("SCROLL WITH LISTENER", "-- OnEndScroll"); 
        scrollViewListener.onEndScroll(); 
       } 
      } 
      break; 

     default: 
     break; 
     } 
     return super.onTouchEvent(ev); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     switch (ev.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      mCurrentlyTouching = true; 
      break; 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_CANCEL: 
      mCurrentlyTouching = false; 
      if(!mCurrentlyFling){ 
       if (scrollViewListener != null) { 
       Log.d("SCROLL WITH LISTENER", "-- OnEndScroll"); 
        scrollViewListener.onEndScroll(); 
       } 
      } 
      break; 

     default: 
      break; 
     } 
     return super.onInterceptTouchEvent(ev); 
    } 
} 
関連する問題