TouchSlop与VelocityTracker认识

TouchSlop是处理触摸事件中的一个常量,被系统认为滑动和点击事件的临界点理 解这个touchSlop是一个滑动距离值的常量,也就是说当我们手触摸在屏幕上滑动时,如果滑动距离没有超过touchSlop值的话 ,android系统本身是不会认为我们在屏幕上做了手势滑动,因此只有当我们在屏幕上的滑动距离超过touchSlop值时,android系统本身才 会认为我们做了滑动操作并去响应触摸事件,不过要注意的是不同的设备,touchSlop的值可能是不同的,一切以函数获取为准。

在各家手机系统默认值是不同的

通过:ViewConfiguration.get(getContext()).getScaledTouchSlop() 获取系统的滑动常量来,判断此时是否属于滑动事件

其中ViewConfiguration这个类主要定义了UI中所使用到的标准常量,像超时、尺寸、距离

在处理滑动事件时,其实可以利用这个值来过滤掉一些没必要的动作,比如当两次滑动距离小于这个值时,我们就可以认为滑动没发生,从而更好的优化用户体验。

VelocityTracker是个速度跟踪类,用于跟踪手指滑动的速度,包括x轴方向和y轴方向的速度。如快速滑动或者其他手势操作。当我们准备开始跟踪滑动速率时可以使用obtain()方法来获取一个 VelocityTracker的实例,然后在onTouchEvent回调函数中,使用addMovement(MotionEvent)函数将当前的 移动事件传递给VelocityTracker对象。当我们决定计算当前触摸点的速率时可以调用computeCurrentVelocity(int units)函数来计算当前的速度,使用getXVelocity() getYVelocity()函数来获得当前X轴和Y轴的速度。

使用例子:

 @Override  

    public boolean onTouchEvent(MotionEvent event) {  

        LogUtils.e("onTouchEvent start!!");  

        Log.i(TAG, "ACTION_DOWN");  

        if(null == mVelocityTracker) {  

            mVelocityTracker = VelocityTracker.obtain();  

        }  

        mVelocityTracker.addMovement(event);  

        final VelocityTracker verTracker = mVelocityTracker;  

        switch (event.getAction()) {  

            case MotionEvent.ACTION_DOWN:  

                //获取第一个触点的id, 此时可能有多个触点,获取其中一个  

                mPointerId = event.getPointerId(0);  

                break;  

            case MotionEvent.ACTION_MOVE:  

                //计算瞬时速度  

                verTracker.computeCurrentVelocity(1000, mMaxVelocity);  

                float velocityX = verTracker.getXVelocity(mPointerId);  

                float velocityY = verTracker.getYVelocity(mPointerId);  

                LogUtils.e("velocityX-->" + velocityX);  

                LogUtils.e("velocityY-->"+velocityY);  

                break;  

            case MotionEvent.ACTION_UP:  

            case MotionEvent.ACTION_CANCEL:  

                releaseVelocityTracker();//释放资源  

                break;  

            default:  

                break;  

        }  

        return super.onTouchEvent(event);  

    }  

    /** 

     * 使用完VelocityTracker,必须释放资源 

     */  

    private void releaseVelocityTracker() {  

        if (mVelocityTracker != null) {  

            mVelocityTracker.clear();  

            mVelocityTracker.recycle();  

            mVelocityTracker = null;  

        }  

    }  

 

 

转载于:https://www.cnblogs.com/ut2016-progam/p/5341774.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VelocityTracker 是 Android 平台上的一个工具类,用于跟踪触摸事件的速度信息。它可以用来计算触摸事件的速度、加速度和方向等参数,以便于实现一些基于手势的操作,比如滑动、拖拽等。 要使用 VelocityTracker,首先需要创建一个实例,可以通过调用其构造函数来实现: ```java VelocityTracker velocityTracker = VelocityTracker.obtain(); ``` 然后,在触摸事件的处理方法中,可以使用 VelocityTracker 来追踪触摸事件的速度。以下是一个示例代码片段,展示了如何使用 VelocityTracker 追踪触摸事件的速度: ```java @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getActionMasked(); switch (action) { case MotionEvent.ACTION_DOWN: // 当手指按下时,重置 VelocityTracker velocityTracker.clear(); break; case MotionEvent.ACTION_MOVE: // 添加触摸事件到 VelocityTracker velocityTracker.addMovement(event); // 计算速度 velocityTracker.computeCurrentVelocity(1000); // 获取水平和垂直方向上的速度 float xVelocity = velocityTracker.getXVelocity(); float yVelocity = velocityTracker.getYVelocity(); // 在这里可以根据速度进行相应的操作 break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: // 当手指抬起或取消触摸时,回收 VelocityTracker velocityTracker.recycle(); break; } return true; } ``` 在上述代码中,我们可以看到,在手指移动的过程中,我们通过调用 `velocityTracker.addMovement(event)` 将触摸事件添加到 VelocityTracker 中,然后通过调用 `velocityTracker.computeCurrentVelocity(1000)` 计算当前的速度。最后,可以通过调用 `velocityTracker.getXVelocity()` 和 `velocityTracker.getYVelocity()` 获取水平和垂直方向上的速度。 需要注意的是,在触摸事件的处理方法中,我们需要在手指按下时清空 VelocityTracker,在手指抬起或取消触摸时回收 VelocityTracker,以确保准确地追踪速度信息。 这就是 VelocityTracker 的基本使用方法,希望能对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值