Android 使用VelocityTracker来获取滑动速度

android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位 。
使用步骤
1.声明

private VelocityTracker mVelocityTracker;

2.初始化

private void init() {
mVelocityTracker = VelocityTracker.obtain();
}

3.在onTouchEvent的开头添加滑动事件

public boolean onTouchEvent(MotionEvent event) {
mVelocityTracker.addMovement(event);

}

当你需要跟踪触摸屏事件的速度的时候,使用obtain()方法来获得VelocityTracker类的一个实例对象

在onTouchEvent回调函数中,使用addMovement(MotionEvent)函数将当前的移动事件传递给VelocityTracker对象

使用computeCurrentVelocity (int units)函数来计算当前的速度,使用getXVelocity ()、 getYVelocity ()函数来获得当前的速度

private VelocityTracker mVelocityTracker;//生命变量
//在onTouchEvent(MotionEvent ev)中
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();//获得VelocityTracker类实例
}
mVelocityTracker.addMovement(ev);//将事件加入到VelocityTracker类实例中
//判断当ev事件是MotionEvent.ACTION_UP时:计算速率
final VelocityTracker velocityTracker = mVelocityTracker;
// 1000 provides pixels per second
velocityTracker.computeCurrentVelocity(1, (float)0.01);//设置maxVelocity值为0.1时,速率大于0.01时,显示的速率都是0.01,速率小于0.01时,显示正常
Log.i(“test”,“velocityTraker”+velocityTracker.getXVelocity());
velocityTracker.computeCurrentVelocity(1000); //设置units的值为1000,意思为一秒时间内运动了多少个像素
Log.i(“test”,“velocityTraker”+velocityTracker.getXVelocity());

4.在onDetachedFromWindow中回收

@Override
protected void onDetachedFromWindow() {
mVelocityTracker.recycle();
super.onDetachedFromWindow();
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VelocityTrackerAndroid 平台上的一个工具类,用于跟踪触摸事件的速度信息。它可以用来计算触摸事件的速度、加速度和方向等参数,以便于实现一些基于手势的操作,比如滑动、拖拽等。 要使用 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
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值