2015-06-28 97 views
0

這裏是我的代碼:Android的多點觸控:沒有ACTION_POINTER_DOWN和UP事件

public boolean onTouch(View v, MotionEvent event) { 

    switch(event.getActionMasked()) { 

    case MotionEvent.ACTION_DOWN: 
     Log.d("getButtonCode", "catch ACTION_DOWN"); 
     break; 
    case MotionEvent.ACTION_POINTER_DOWN: 
     Log.d("getButtonCode", "catch ACTION_POINTER_DOWN"); 
     break; 
    case MotionEvent.ACTION_POINTER_UP: 
     Log.d("getButtonCode", "catch ACTION_POINTER_UP"); 
     break; 
    case MotionEvent.ACTION_UP: 
     Log.d("getButtonCode", "catch ACTION_UP"); 
    case MotionEvent.ACTION_CANCEL: 
     Log.d("getButtonCode", "catch ACTION_CANCEL"); 
    case MotionEvent.ACTION_MOVE: 
     break; 
    default: 
     break; 
    } 
    return true; 
} 

,我永遠也趕不上ACTION_POINTER_DOWN和ACTION_POINTER_UP。如果我從ACTION_DOWN中刪除break,我總是在ACTION_DOWN後面捕獲ACTION_POINTER_DOWN,即使它是第一個指針。我認爲它應該是這樣的:第一個指針只捕獲ACTION_DOWN,每個下一個指針只有ACTION_POINTER_DOWN,如果非主要指針已經上漲,我應該捕獲ACTION_POINTER_UP。

但它不起作用。我的代碼有什麼問題? PS:我看到其他類似的問題,但沒有答案幫助我。

回答

0

而不是使用switch語句,我流過了一系列if語句。這讓我測試了event.getAction()或event.getActionMasked(),它允許一次執行多個可能的操作。

public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       startingX = (int) event.getX(); 
       startingY = (int) event.getY(); 
      } 
      if(event.getAction() == MotionEvent.ACTION_MOVE) { 
       int scaleX = 1; 
       int scaleY = 1; 
       if(touchStateScale == true){ 
        scaleX = (int) (event.getX(0) - event.getX(1)); 
        scaleY = (int) (event.getY(0) - event.getY(1)); 
       } 
       int endingX = (int) event.getX(); 
       int endingY = (int) event.getY(); 

       int newX = endingX-startingX; 
       int newY = endingY-startingY; 


      ((ImageView) v).setImageBitmap(drawNewImageScaled(baseImage, newImageResourceId, newX, newY, scaleX, scaleY)); 
      } 
      if(event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN){ 
       Log.i(TAG, "second pointer detected"); 
       touchStateScale = true; 
      } 
      if (event.getAction() == MotionEvent.ACTION_UP) { 
       touchStateScale = false; 
       return false; 
      } 
      return true; 
     } 
    };