首页 > 代码库 > Android VelocityTracker 速度监测
Android VelocityTracker 速度监测
转载http://blog.csdn.net/wobilini/article/details/9071579
转载http://blog.csdn.net/hudashi/article/details/7352157
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | addMovement(MotionEvent event) Add a user‘s movement to the tracker. | ||||||||||
void | clear() Reset the velocity tracker back to its initial state. | ||||||||||
void | computeCurrentVelocity(int units, float maxVelocity) Compute the current velocity based on the points that have been collected. int unitis表示速率的基本时间单位。unitis值为1的表示是,一毫秒时间单位内运动了多少个像素, unitis值为1000表示一秒(1000毫秒)时间单位内运动了多少个像素 floatVelocity表示速率的最大值 | ||||||||||
void | computeCurrentVelocity(int units) Equivalent to invoking computeCurrentVelocity(int, float) with a maximum velocity of Float.MAX_VALUE. | ||||||||||
abstract T | getNextPoolable() | ||||||||||
float | getXVelocity() Retrieve the last computed X velocity. | ||||||||||
float | getXVelocity(int id) Retrieve the last computed X velocity. | ||||||||||
float | getYVelocity(int id) Retrieve the last computed Y velocity. | ||||||||||
float | getYVelocity() Retrieve the last computed Y velocity. | ||||||||||
abstract boolean | isPooled() | ||||||||||
static VelocityTracker | obtain() Retrieve a new VelocityTracker object to watch the velocity of a motion. | ||||||||||
void | recycle() Return a VelocityTracker object back to be re-used by others. | ||||||||||
abstract void | setNextPoolable(T element) | ||||||||||
abstract void | setPooled(boolean isPooled) |
布局文件 activity_main:
在这里,我们只定义了一个TextView用来显示等下我们的手指移动的速度,这里我们把它初始化为:hello world
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello world" />
</RelativeLayout>
再下来是MainActivity:
public class MainActivity extends Activity{
private TextView tv;
private VelocityTracker vt=null;
protect void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=()findViewById(R.id.tv);
}
public boolean onTouchEvent(MotionEvent event){
int action=event.getAvtion();
switch(action){
case:MotionEvent.ACTION_DOWN:
if(vt==null){
//初始化velocityTracker的对象 vt 用来监测motionevent的动作
vt=VelocityTracker.obtain();
}else{
vt.clear();
}
vt.addMovement(event);
break;
case:MotionEvent.ACTION_MOVE:
vt.addMovement(event);
//代表的是监测每1000毫秒手指移动的距离(像素)即m/px,这是用来控制vt的单位,若括号内为1,则代表1毫秒手指移动过的像素数即ms/px
vt.computeCurrentVelocity(1000);
//这里x为正则代表手指向右滑动,为负则代表手指向左滑动,y的比较特殊,为正则代表手指向下滑动,为负则代表手指向上滑动
tv.setText("the x velocity is"+vt.getXVelocity);
tv.append("the y velocity is"+vt.getYVelocity);
break;
case:MotionEvent.ACTION_UP:
case:MotionEvent.CANCEL:
vt.recycle();
break;
}
return true;
}
}
Android VelocityTracker 速度监测