2010-06-30 91 views

回答

38

實現的onTouchEvent(),並且其中用戶按下並擡起通過計算dx和dy。您可以使用這些值來確定移動的方向。

float x1, x2, y1, y2, dx, dy; 
String direction; 
switch(event.getAction()) { 
    case(MotionEvent.ACTION_DOWN): 
     x1 = event.getX(); 
     y1 = event.getY(); 
     break; 

    case(MotionEvent.ACTION_UP): { 
     x2 = event.getX(); 
     y2 = event.getY(); 
     dx = x2-x1; 
     dy = y2-y1; 

     // Use dx and dy to determine the direction of the move 
     if(Math.abs(dx) > Math.abs(dy)) { 
      if(dx>0) 
       direction = "right"; 
      else 
       direction = "left"; 
     } else { 
      if(dy>0) 
       direction = "down"; 
      else 
       direction = "up"; 
     } 
    } 
} 
+4

很好的答案,但我發現了一些錯別字,不得不將一些變量帶到更高的範圍,使它們從交換機內部變爲可變的。 – 2012-10-30 15:29:44

+1

對於第二個開關案例,我使用了ACTION_MOVE而不是ACTION_UP,因爲在ViewPager中,無需ACTION_UP就可以調用swipe。我有一個由ViewGroup控制的垂直方向的ScrollView,這是一個ViewPager頁面。在ScrollView上滑動確實會改變頁面而不是沒有響應。 case MotionEvent.ACTION_MOVE:float dx = event.getX() - x1; float dy = event.getY() - y1; if(Math.abs(dx)<= Math.abs(dy)){//垂直滾動 v.getParent()。requestDisallowInterceptTouchEvent(true); } else {v.getParent()。requestDisallowInterceptTouchEvent(false);} break; – 2015-08-24 15:32:51

+0

ScrollView瓦特/垂直方向嵌套在另一個ScrollView,由ViewGroup舉行我的意思。 – 2015-08-24 16:10:19

8

你最好的辦法是處理你從View.OnTouchListener()回調中獲得的MotionEvent。動作事件會跟蹤您當前如何通過其操作屬性與View進行交互。

我會想象你可以通過檢查MotionEvents的動作屬性和運動事件發生的地點的x/y值來計算出某人滑動手指的方向。

switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      oldX= event.getX(); 
      oldY= event.getY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      int newX = motionEvent.getX(); 
      int newY = motionEvent.getY(); 

      int deltaX = oldX - newX; 
      int deltaY = oldY - newY; 

      if(Math.abs(deltaY)>Math.abs(deltaX)) 
       //Motion in Y direction. 
      else 
       // Motion in X direction. 
      break; 
     } 

有很多其它方法可用的MotionEvent對象上使用,以及: http://developer.android.com/reference/android/view/MotionEvent.html

+0

底部的檢查應該是'如果(Math.abs(移動deltaY)> Math.abs(DELTAX))' – tibbi 2017-08-06 14:07:40

+0

@tibbi固定的,謝謝! – 2017-08-06 21:26:54