Android VelocityTracker 速度監測

來源:互聯網
上載者:User

標籤: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 速度監測

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.