[置顶] Android(安卓)中VelocityTracker 介绍及简单用法
导读
在自定义控件的开发中,会根据某些条件来进行界面的变换和其他操作。例如:通过手势检测下拉手势来进行列表的下拉。有的也通过检测速度来进行相关的操作。如 当速度大打某一个阈值的时候,进行某些操作,今天就来介绍Android用于速度检测的类–VelocityTracker。
简介
根据谷歌开发者参考文档,VelocityTracker用于跟踪触摸事件的速度。我们可以通过 obtail()方法获得 VelocityTracker实例。在你想要检测的触摸事件中 使用 addMovement()将触摸事件传递给VelocityTracker进行计算。在得到速度之前,我们应该先调用computeCurrentVelocity的重载方法计算此时的速度,然后我们就能通过getVelcity来得到我们想要的速度。
实例
下会自定义一个View用于实验VelocityTracker的用法。
public class DemoView extends View { private static final String TAG = "DemoView"; private VelocityTracker velocityTracker; public DemoView(Context context, AttributeSet attrs) { super(context, attrs); } public DemoView(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { velocityTracker = VelocityTracker.obtain(); velocityTracker.addMovement(event); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: velocityTracker.computeCurrentVelocity(1000, Float.MAX_VALUE); Log.e(TAG,velocityTracker==null?"null":(velocityTracker.getXVelocity()+"")); break; case MotionEvent.ACTION_UP: if (velocityTracker!=null) { velocityTracker.recycle(); velocityTracker= null; } break; default: break; } return true; }
我们在接收到onTouchEvent中获得 VelocityTracker对象,并将该事件传递给VelocityTracker对象。我们想要计算手指在手机屏幕上面滑动的速度,就在 Action_Move中去计算此时的速度和得到垂直方向或竖直方向的速度。上列中,我们获取的是 水平方向的速度。当手指向右滑动的时候,速度是正数,反之为负数。当手指滑动越快,得到速度的绝对值越大。在Action_Up中我们对 VelocityTracker进行回收。
在最后,我们应该在onTouchEvent中返回true,代表我们消耗了这个事件,这样后续事件才能继续传递进来。
关键点
当我们想要得到速度值之前必须调用computeCurrentVelocity方法以计算速度,不然得到的速度为空。
computeCurrentVelocity有两个重载方法,其中,一个参数的方法调用了两个参数的方法。
public void computeCurrentVelocity(int units) { computeCurrentVelocity(units, Float.MAX_VALUE); }
在 两个参数的方法中,传入两个整形值。units和maxVelocity。第一个参数规定了速度检测的时间段,VelocityTracker会在units时间段内对速度进行检测,但是是毫秒。
maxVelocity指的是最大检测速度。一般传Float.MaxValue。
更多相关文章
- AsyncTask 和 Handler的优缺点
- Android支持库中Fragment的使用及参数传递
- Android(安卓)SDK开发指南(翻译)系列一:最佳实践(二)-- 反应速度设
- Android(安卓)双击返回键退出程序的方法总结
- postDelayed方法和removeCallbacks方法的使用(1)
- Android中Fragmen首选项使用自定义的ListPreference的方法
- Android第三方登录之微信登录
- Android学习之Android(安卓)studio TraceView和lint工具的使用详
- android 输入法(包括手写界面)