【问题标题】:How to check HorizontalScrollView scroll state?如何检查 Horizo​​ntalScrollView 滚动状态?
【发布时间】:2016-12-05 15:32:21
【问题描述】:

我需要访问HorizontalScrollView 中的滚动状态。怎么可能?

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

            @Override
            public void onScrollChanged() {

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

【问题讨论】:

  • 您发布的代码是否有效?问题出在哪里?

标签: java android gridview horizontal-scrolling


【解决方案1】:

使用滚动视图,您可以创建如下所示的自定义,我认为您也可以创建这样的自定义水平滚动视图?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多