標籤:des android blog http ar io 使用 sp on
轉載http://blog.csdn.net/wobilini/article/details/9071579
轉載http://blog.csdn.net/hudashi/article/details/7352157
android.view.VelocityTracker主要用跟蹤觸控螢幕事件(flinging事件和其他gestures手勢事件)的速率。用addMovement(MotionEvent)函數將Motion event加入到VelocityTracker類執行個體中.你可以使用getXVelocity() 或getXVelocity()獲得橫向和豎向的速率到速率時,但是使用它們之前請先調用computeCurrentVelocity(int)來初始化速率的單位 。主要函數
| 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) |
樣本: private VelocityTracker mVelocityTracker;//生命變數 //在onTouchEvent(MotionEvent ev)中 if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain();//獲得VelocityTracker類執行個體 } mVelocityTracker.addMovement(ev);//將事件加入到VelocityTracker類執行個體中 //判斷當ev事件是MotionEvent.ACTION_UP時:計算速率 final VelocityTracker velocityTracker = mVelocityTracker; // 1000 provides pixels per second velocityTracker.computeCurrentVelocity(1, (float)0.01); //設定maxVelocity值為0.1時,速率大於0.01時,顯示的速率都是0.01,速率小於0.01時,顯示正常 Log.i("test","velocityTraker"+velocityTracker.getXVelocity()); velocityTracker.computeCurrentVelocity(1000); //設定units的值為1000,意思為一秒時間內運動了多少個像素 Log.i("test","velocityTraker"+velocityTracker.getXVelocity()); 大體的使用是這樣的:當你需要跟蹤觸控螢幕事件的速度的時候,使用obtain()方法來獲得VelocityTracker類的一個執行個體對象在onTouchEvent回呼函數中,使用addMovement(MotionEvent)函數將當前的移動事件傳遞給VelocityTracker對象使用computeCurrentVelocity (int units)函數來計算當前的速度,使用 getXVelocity ()、 getYVelocity ()函數來獲得當前的速度
布局檔案 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 速度監測