2014-07-14 57 views
0

我有一個自定義的視圖,我想檢測觸摸以及它們的速度。 目前,我會覆蓋onTouchEvent,但正如您所知,任何觸摸事件的速度都不是由此方法提供的。是否可以使用其他方法來提供觸摸事件的速度?如何檢測類中觸摸事件的速度extends View?

回答

0

試試這個代碼

public boolean onTouchEvent(MotionEvent event) { 
     if (mVelocityTracker == null) { 
      mVelocityTracker = VelocityTracker.obtain(); 
     } 
     mVelocityTracker.addMovement(event); 

     final int action = event.getAction(); 
     final float x = event.getX(); 
     final float y = event.getY(); 

     switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      // Log.i(TAG, "on touch down ^^"); 
      mLastMotionX = x; 
      mLastMotionY = y; 
      break; 

     case MotionEvent.ACTION_MOVE: 
      // Log.i(TAG, "on touch move ^^"); 
      mLastMotionX = x; 
      mLastMotionY = y; 
      break; 

     case MotionEvent.ACTION_UP: 
      mLastMotionX = x; 
      mLastMotionY = y; 
      final VelocityTracker velocityTracker = mVelocityTracker; 
      velocityTracker.computeCurrentVelocity(1000); 
      int velocityX = (int) velocityTracker.getXVelocity(); 
      Log.e("Velocity X",""+velocityX); 
      int velocityY = (int) velocityTracker.getYVelocity(); 
      Log.e("Velocity Y",""+velocityY); 
      if (mVelocityTracker != null) { 
       mVelocityTracker.recycle(); 
       mVelocityTracker = null; 
      } 

      break; 
     case MotionEvent.ACTION_CANCEL: 

      break; 
     } 

     return true;} 
0

答案提供here很好。觸摸開始時獲取startX,startY位置,觸摸結束時獲取endX,endY。

然後,您可以計算移動的長度和時間。

運動的長度和花費的時間比例就是你的速度。

編輯:

這裏的跟蹤運動速度的建議方法:Android Docs

+1

這是太明顯了。 OP想要一些內置的方法來爲他做到這一點。 – Marius