一起Talk Android吧(第四百五十四回:计算View的滑动距离)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百五十四回:计算View的滑动距离)相关的知识,希望对你有一定的参考价值。

文章目录


各位看官们大家好,上一回中咱们说的例子是"给View添加滑动事件",这一回中说的例子是" 计算View的滑动距离"。闲话休提,言归正转,让我们一起Talk android吧!

整体思路

我们在上一章回中介绍了如何给View添加滑动事件,滑动事件本质上是利用滑动的距离来移动View,在上一章回中我们是利用View中的事件坐标来计算滑动距离:按下事件发生时获取滑动开始坐标,滑动结束时获取滑动结束坐标,结束坐标值与开始坐标值的差值就是View的滑动距离,这个思路大家很容易理解。我们本章回中再介绍另外一种计算滑动距离的思路:VelocityTracker.

使用方法

VelocityTracker类是Android提供的类,它用来跟踪触摸事件的变化速度,速度分为水平和垂直两个方向的速度,对应于View坐标中的x轴和y轴。接下来我们介绍该类的使用方法,还和以前一样,通过文字结合代码的方式来介绍。

  • 1.获取类的对象;
 mVelocityTracker = VelocityTracker.obtain();
  • 2.注册监听事件,以便监听View中的事件;
@Override //在View的回调方法中注册监听事件
public boolean onTouchEvent(MotionEvent event) 
    super.onTouchEvent(event);
    mVelocityTracker.addMovement(event);

  • 3.计算滑动速度;
mVelocityTracker.computeCurrentVelocity(1000);

注意:computeCurrentVelocity()方法的参数表示一个间隔时间,它的单位是ms,滑动距离的单位是像素(px),因此滑动速率的单位是px/ms.比如,上面代码中表示1000ms内的事件滑动速率,滑动速率的单位是px/1000ms,或者说px/s.

  • 4.获取滑动速度;
   float velocityX = mVelocityTracker.getXVelocity();
   float velocityY = mVelocityTracker.getYVelocity();
  • 5.释放相关资源;
mVelocityTracker.clear();
mVelocityTracker.recycle();

使用获取到的滑动速率乘以滑动时间就可以计算出滑动距离,是不是比我们手动计算坐标的差值要方便一些?

注意滑动速度有正值和负值,负值表示向左或者向上滑动,因为这两个方向的距离差值是负值。

示例代码

下面演示一个完整的示例代码:

@Override
public boolean onTouchEvent(MotionEvent event) 
    super.onTouchEvent(event);
    mVelocityTracker.addMovement(event);

    switch (event.getAction()) 
        case MotionEvent.ACTION_DOWN:
            break;
        case MotionEvent.ACTION_UP:
            mVelocityTracker.clear();
            mVelocityTracker.recycle();
            break;
        case MotionEvent.ACTION_MOVE:
            mVelocityTracker.computeCurrentVelocity(1000);
            float velocityX = mVelocityTracker.getXVelocity();
            float velocityY = mVelocityTracker.getYVelocity();
            break;
        default:
            break;
    

    return true;

在上面的代码中,我们在滑动事件中(MOVE)计算滑动速率,在弹起事件(UP)中释放资源。这种使用方法可以当作一个模板或者示例,大家可以参考此模板来使用。

看官们,关于"计算View的滑动距离"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第四百五十四回:计算View的滑动距离)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百二十四回:绘图知识总结)

一起Talk Android吧(第四百五十八回:SeekBar补充用法一)

一起Talk Android吧(第四百五十九回:SeekBar补充用法二)

一起Talk Android吧(第四百七十四回:如何使用视图动画)

一起Talk Android吧(第四百五十七回:修改View的布局参数)

一起Talk Android吧(第四百四十四回:UI控件之DatePicker)