运动事件的速度或加速度在安卓系统中如何实现?

4

在Android中,是否可以使用现有的API获取触摸事件的速度、速率或加速度?我已经查看了MotionEvent类,并且那个类中没有任何字段似乎可以检索到我需要的信息。非常感谢任何帮助。


MotionEvents无法跟踪加速度计事件: 请参见此处: http://developer.android.com/reference/android/view/MotionEvent.html 您需要获取SensorManager的实例以获取加速度计事件。这里有一个很好的示例: http://www.techrepublic.com/blog/app-builder/a-quick-tutorial-on-coding-androids-accelerometer/472 - Jian Chen
我认为他不是指加速度计。 - Dmitry Zaytsev
是的,我不是指加速计。我的意思是手势的速度或速率。 - user1253887
2个回答

14

MotionEvent在这种情况下无法帮助您。您可以使用VelocityTracker类,它获得MotionEvent实例并计算最近触摸事件的速度。 您可以在此处查看其文档: http://developer.android.com/reference/android/view/VelocityTracker.html

首先,您需要通过obtain()方法获取一个实例:

VelocityTracker velocity = VelocityTracker.obtain();

然后您可以将ACTION_MOVE事件添加到其队列中:

    if(event.getAction() == MotionEvent.ACTION_MOVE)
    {
        velocity.addMovement(event);
    }

那么你可以计算速度并提取 x_velocity 和 y_velocity。

velocity.computeCurrentVelocity(1000);
float x_velocity = velocity.getXVelocity();
float y_velocity = velocity.getYVelocity();

我希望它对你有用。


0
你需要使用 System.nanoTime 手动计算每两个事件之间的速度。同样的方式可以用于计算加速度(但这次是使用速度而不是坐标)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接