Android VelocityTracker 速度跟踪器

使用VelocityTracer可以实现跟踪手指移动的速度变化,实时计算出速度,在Scroller中应用广泛,下面给出简单用法。

简介

VelocityTracer可以帮助你追踪一个touch事件(flinging事件和其他手势事件)的速率。当你要跟踪一个touch事件的时候,使用obtain()方法得到这个类的实例,然后 用addMovement(MotionEvent)函数将你接受到的motion event加入到VelocityTracker类实例中。当你使用到速率时,使用computeCurrentVelocity(int)初始化速率的单位,并获得当前的事件的速率,然后使用getXVelocity() 或getXVelocity()获得横向和竖向的速率。

获取及回收VelocityTracker

// 获取速度跟踪器对象
mTracer = VelocityTracker.obtain();
mTracer.addMovement(event);
// 必须回收该对象
mTracer.clear();
mTracer.recycle();

计算滑动的实时速度

// 初始化速率的单位
//设置units的值为1000,意思为一秒时间内运动了多少个像素 
mTracer.computeCurrentVelocity(10, ViewConfiguration.get(this)
                    .getMaximumFlingVelocity());
                    // 获取横纵坐标的速度
            float vX = mTracer.getXVelocity(mPointID);
            float vY = mTracer.getYVelocity(mPointID);

完整DEMO

如果有多点触控的话,,需要使用PointerID来进行分辨每个点的运动速度


public class MainActivity extends ActionBarActivity {

    private TextView mTvRecord;
    private VelocityTracker mTracer;
    private int mPointID; // 触点ID

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTvRecord = (TextView) findViewById(R.id.id_tv_record);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        // 获取速度跟踪器对象
        mTracer = VelocityTracker.obtain();
        mTracer.addMovement(event);
        switch (action) {
        case MotionEvent.ACTION_DOWN:

            // 获取第一个pointID
            mPointID = event.getPointerId(0);
            break;

        case MotionEvent.ACTION_MOVE:
            mTracer.computeCurrentVelocity(10, ViewConfiguration.get(this)
                    .getMaximumFlingVelocity());
            float vX = mTracer.getXVelocity(mPointID);
            float vY = mTracer.getYVelocity(mPointID);
            mTvRecord.setText("X:  " + vX + "  Y:" + vY);
            break;
        case MotionEvent.ACTION_UP:
            // 必须回收该对象
            mTracer.clear();
            mTracer.recycle();
            break;
        case MotionEvent.ACTION_CANCEL:
            mTracer.clear();
            mTracer.recycle();
            break;
        default:
            break;
        }
        return super.onTouchEvent(event);
    }
}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值