前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VelocityTracker使用

VelocityTracker使用

原创
作者头像
好好学习吧
修改2021-10-20 18:17:32
6190
修改2021-10-20 18:17:32
举报
文章被收录于专栏:今天学习了吗今天学习了吗

1 简介

VelocityTracker用于触摸事件的速度追踪,它可以获取当前触摸事件的速度值,根据速度值,我们可以判断当前的手势是否是fling等。通常用于实现fling时的滑动效果,以其让控件显得丝滑流畅。

2 用法简介

先来看下VelocityTracker类对外提供的API接口

代码语言:txt
复制
static VelocityTracker obtain() //获取VelocityTracker对象

void addMovement(MotionEvent event) //将需要追踪速度的触摸事件添加进来,可以是ACTION_DOWN, ACTION_MOVE, ACTION_UP中的任一个

/**
 * 用于计算添加进来的事件的速度,
 * units是速度的单位,通常设置为1000,意思是计算的的速度,单位是像素/秒
 * maxVelocity是速度的最大值,
 */
void computeCurrentVelocity(int units, float maxVelocity) 

void computeCurrentVelocity(int units) 

/*
 *获取id对应的手指在水平方向的速度,使用该方法前要调用computeCurrentVelocity()
 */
float getXVelocity(int id)

float getXVelocity()

/*
 *获取id对应的手指在垂直方向的速度,使用该方法前要调用computeCurrentVelocity()
 */
float getYVelocity(int id)

float getYVelocity()

void clear() //重置velocityTracker,回到初始状态

void recycle() //回收复用

用法如下,以onTouchEvent为例

代码语言:txt
复制
Private VelocityTracker mVelocityTracker;

public void onTouchEvent(MotionEvent ev) {
    ...
    if (mVelocityTracker == null) {
       mVelocityTracker = VelocityTracker.obtain();
    }

    switch (ev.getAction()) {
      ...
      case MotionEvent.ACTION_UP:
         mVelocityTracker.addMovement(ev);
         mVelocityTracker.computeCurrentVelocity(1000, mMaxVelocity);
         float velocityX = mVelocityTracker.getX();
         float velocityY = mVelocityTracker.getY();
         ...
    }
    ...
}

3 总结

VelocityTracker类是通过jni的方式,在native层做的速度计算。应用层使用时,确实需要计算速度时,再调用addMovement()和computeCurrentVelocity()方法,毕竟这些都是耗时的方法。参考上例。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 简介
  • 2 用法简介
  • 3 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com