导读

在自定义控件的开发中,会根据某些条件来进行界面的变换和其他操作。例如:通过手势检测下拉手势来进行列表的下拉。有的也通过检测速度来进行相关的操作。如 当速度大打某一个阈值的时候,进行某些操作,今天就来介绍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。

更多相关文章

  1. AsyncTask 和 Handler的优缺点
  2. Android支持库中Fragment的使用及参数传递
  3. Android(安卓)SDK开发指南(翻译)系列一:最佳实践(二)-- 反应速度设
  4. Android(安卓)双击返回键退出程序的方法总结
  5. postDelayed方法和removeCallbacks方法的使用(1)
  6. Android中Fragmen首选项使用自定义的ListPreference的方法
  7. Android第三方登录之微信登录
  8. Android学习之Android(安卓)studio TraceView和lint工具的使用详
  9. android 输入法(包括手写界面)

随机推荐

  1. Android(安卓)使用 Gmail 来发送邮件
  2. android 圆角图标 和不规则圆角(边框)
  3. android 日期时间格式转换;软键盘显示消失
  4. android Vibrator 使用
  5. Android添加垂直滚动ScrollView
  6. android webview ERR_UNKNOWN_URL_SCHEME
  7. Android模拟、实现、触发系统按键事件的
  8. 一些非常实用的 Android(安卓)开发资源
  9. android 8.0、8.1 崩溃报 "Only fullscre
  10. Android通过编码实现GPS开关