VelocityTracker是android中用于计算触摸速度的类,从其字面意思来看就是速度追踪,使用VelocityTracker的方法如下:
一、首先通过VelocityTracker的静态方法获得VelocityTracker对象
velocityTracker = VelocityTracker.obtain();
二、为VelocityTracker对象添加MotionEvent
velocityTracker.addMovement(event);
三、调用VelocityTracker的计算方法
velocityTracker.computeCurrentVelocity(1000);
上面的方法参数是一个int型的units,指的是计算的速度的单位,传1代表每毫秒的速度,传1000代表每秒的速度
四、获取速度值
xSpeed = velocityTracker.getXVelocity();
ySpeed = velocityTracker.getYVelocity();
使用上面两个方法用于获取x方向和y方向的速度,可在上面两个方法中传递int类型的参数,用于指定触屏事件的id值,因为可能有多个触屏事件同时发生
五、使用完毕回收资源
velocityTracker.recycle();
上面五个步骤就是VelocityTracker的使用方法,下面通过一个demo来用一用VelocityTracker:
在布局文件中我们放入一个TextView,大小为横向纵向都填满父控件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
tools:context=".MainActivity" />
</RelativeLayout>
下面是Activity中的代码,当手指在屏幕上移动时,我们通过计算触屏的速度,然后在TextView中显示出来:
package com.example.testvelocity;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.widget.TextView;
public class MainActivity extends Activity{
private TextView textView;
private float xSpeed;
private VelocityTracker velocityTracker;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textview);
velocityTracker = VelocityTracker.obtain();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
velocityTracker.addMovement(event);
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
velocityTracker.computeCurrentVelocity(1000);
xSpeed = velocityTracker.getXVelocity();
textView.setText("xSpeed = " + xSpeed);
break;
case MotionEvent.ACTION_UP:
velocityTracker.recycle();
break;
}
return super.onTouchEvent(event);
}
}
需要注意的是,我在开始写代码时,没有复写onTouchEvent方法,而是使用了onTouchListener,给TextView添加了onTouchListener监听器,然后在onTouch方法中写的上面的代码,后来发现用错了,不是为TextView添加onTouchListener监听器,而是复写Activity中的onTouchEvent方法才能达到效果。
上面的代码运行效果如下图: