美文网首页
ScrollView快速滑动或拖拽停止事件监听

ScrollView快速滑动或拖拽停止事件监听

作者: sun_wenming | 来源:发表于2017-04-05 12:08 被阅读0次

    解决思路:
    中心思路:每过200毫秒判断一次滚动的Y值是否发生变化
    设立onKeyUp的监听,在手指离开屏幕后用 handler.sendMessageDelayed(handler.obtainMessage(1), 200)每隔200毫秒getScrollY()一次,然后比较getScrollY()的值直到与上次得到的相等时就是scrollview停止滑动了。

    办法:
    在 ScrollView的 setOnTouchListener 监听中 onKeyUp的监听
    当 手指 抬起的时候 MotionEvent.ACTION_UP 通过handler 发送一个 延迟消息 判断 当前滚动Y的位置,是否和之前的一致。如果一致,那么说明 ScrollView滚动完成 不一致 说明 正在滚动 那么 handleMessage 内部 再发送一次消息
    当 ScrollView滚动 完成之后 处理 相应的逻辑

       case MotionEvent.ACTION_UP:
                            mHandler.sendEmptyMessageDelayed(0, 10);
                            break;
                            
    //  用于 存储 上一次 滚动的Y坐标
    private int lastY=-1;
        private Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0) {
                // 打印 每次 Y坐标 滚动的距离
    //                LogUtils.e(scrollView.getScrollY() + "");
    //    获取到 滚动的 Y 坐标距离
                    int scrollY = scrollView.getScrollY();
    // 如果 滚动 的Y 坐标 的 最后一次 滚动到的Y坐标 一致说明  滚动已经完成 
                    if (scrollY == lastY) {
    //  ScrollView滚动完成  处理相应的事件
                    
                    } else {
      // 滚动的距离 和 之前的不相等 那么 再发送消息 判断一次
    // 将滚动的 Y 坐标距离 赋值给 lastY
                        lastY = scrollY;
                        mHandler.sendEmptyMessageDelayed(0, 10);
                    }
                }
            }
        };
    

    相关文章

      网友评论

          本文标题:ScrollView快速滑动或拖拽停止事件监听

          本文链接:https://www.haomeiwen.com/subject/uybtattx.html