2016-07-08 73 views
2

我有一個自定義的佈局縮放縮放代碼作爲父級和處理單擊功能的子佈局。因此,我使用觸摸攔截,但問題是,它不知道何時點擊或拖動。如何區分拖動和點擊onTouchEvent()?

@Override 
    public boolean onInterceptTouchEvent(MotionEvent ev){ 


    switch (ev.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
      startClickTime = System.currentTimeMillis(); //start time when first finger land 
      Log.i("Zoom", " actionDown"); 
      if (scale > MIN_ZOOM){ 
       mode = Mode.DRAG; 
       startX = ev.getX() - prevDx; 
       startY = ev.getY() - prevDy; 
      } 
      return false; //go to child layout 

     case MotionEvent.ACTION_POINTER_DOWN: 
      mode = Mode.ZOOM; 
      return true; 

     case MotionEvent.ACTION_UP: 
      long clickDuration = System.currentTimeMillis() - startClickTime; 
      mode = Mode.NONE; 
      if(clickDuration < MAX_CLICK_DURATION){ 
       return false; 
      } 
      else { 
       // letting go from drag or zooming 
       return true; 
      } 

     case MotionEvent.ACTION_MOVE: 
      clickDuration = System.currentTimeMillis() - startClickTime; 
      if (clickDuration > MAX_CLICK_DURATION){ 
       return true; 
      } 
      else { 
       return false; 
      } 
    } 
    return false; 
} 

在我的孩子佈局單擊功能:

switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) { 

       case MotionEvent.ACTION_DOWN: 
         // primary finger down 
        return true; 

       case MotionEvent.ACTION_POINTER_DOWN: 
         // non-primary finger down 
        return false; 

       case MotionEvent.ACTION_CANCEL: 
        return false; 

       case MotionEvent.ACTION_UP: 
        // primary finder up 
        Intent intent = new Intent(context, DeviceActivity.class); 
        context.startActivity(intent); 
        return true; 

       case MotionEvent.ACTION_POINTER_UP: 
        // non-primary finger up 
        return false; 
      } 

那麼,有沒有辦法區分拖動和點擊。

回答

0

有在點擊和拖動事件四種狀態: 開始 - >繼續 - >下跌 - >端

DragEvent類提供整數代表他們:

  • ACTION_DRAG_STARTED
  • ACTION_DRAG_ENTERED
  • ACTION_DRAG_LOCATION
  • ACTION_DRAG_EXITED
  • ACTION_DROP
  • ACTION_DRAG_ENDED

一定要記住,拖動操作,需要在屏幕上所選項目(你撿的東西和移動)。但在縮放時,您沒有選擇的項目,但您獲取的是視圖。使用此屬性可以區分拖動和縮放操作。

+0

你有如何在onInterceptTouchEvent使用它的例子嗎? –

+0

https://developer.android.com/training/gestures/scale.html – Sampath

0

試試這個:

final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { 
public void onLongPress(MotionEvent e) { 
    Log.e("", "Longpress detected"); 
} 
}); 

public boolean onTouchEvent(MotionEvent event) { 
    return gestureDetector.onTouchEvent(event); 
}; 
+1

OP爲什麼要「嘗試此代碼」?一個好的答案**將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,而且是爲了將來SO的訪問者。 –