一起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的滑动距离"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

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

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

打赏作者

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

抵扣说明:

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

余额充值