2012-07-24 90 views
2

你好我想,當兩個手指觸摸屏幕來檢測:Android的觸摸事件指針向下

case MotionEvent.ACTION_POINTER_2_DOWN: { 

    twoFing=true; 
    return true; 
} 

的問題是:

public static final int ACTION_POINTER_2_DOWN 

被depreceted時,醫生說:

* getActionMasked()的常量:非主指針已關閉。 使用getActionIndex()檢索更改的指針的索引。 該索引編碼在由getAction()返回的未屏蔽動作的ACTION_POINTER_INDEX_MASK位中。*

但我不明白如何使用它...我怎麼能檢測到有2個指針? ActionUP上下總是說,只有一個指針,如果我嘗試getPointerIndex()

非常感謝

編輯:我在這裏發佈完整的代碼是關於這個問題更加清晰。我的代碼正在工作,但ACTION_POINTER_2_DOWN是一個不推薦的值,我想用別的東西代替它,但我不知道如何。

@SuppressWarnings("deprecation") 
public boolean onTouch(View v, MotionEvent event) { 

switch(event.getAction()){ 

case MotionEvent.ACTION_DOWN : { 
    Log.i(TAG, "Action Down"); 
    downX = event.getX(0); 
    downY = event.getY(0); 
    return true; 
} 

case MotionEvent.ACTION_UP: { 


    upX = event.getX(0); 
    upY = event.getY(0); 

    float deltaX = downX - upX; 
    float deltaY = downY - upY; 
    Log.i(TAG, "Action UP deltaX="+deltaX+", deltaY="+deltaY); 



    // swipe vertical? 
    if(Math.abs(deltaY) > MIN_DISTANCE && twoFing){ 
     twoFing=false; 

     // top or down 
     if(deltaY < 0) 
     { 
      if(slide.zoom==1) 
      slide.zoom=0; 
     Log.i(TAG, "Going Down zooming in"); 
      //return true; 
     } 
     if((deltaY > 0)) 
     { 

      if(slide.zoom==0) 
       slide.zoom=1; 
      Log.i(TAG, "Going up zoomig out"); 
      //return true; 
     } 

     return true; 
    } 
    // swipe horizontal? 
    if(Math.abs(deltaX) > MIN_DISTANCE && !twoFing){ 

     // left or right 
     if(deltaX < 0) { this.slideToTheLeft(); return true; } 
     if(deltaX > 0) { this.slideToTheRight(); return true; } 
     return true; 
    } 

    return false; 
} 

case MotionEvent.ACTION_POINTER_2_DOWN: { 

    twoFing=true; //inform that the touch was made with 2 fingers 
    Log.i(TAG, "Action Second pointer down"); 

    return true; 
} 
} 
return false; 

}

回答

0

你嘗試用getPointerId(index)不同值index

參見ID和索引之間的差值:

指數與ID

在一個較高的水平,從在時間快照觸摸屏數據可能不能立即 有用的,因爲觸摸手勢涉及隨着時間的推移運動 跨越許多運動事件。指針索引不一定匹配跨越複雜事件,它僅指示MotionEvent中的數據位置 。然而,這不是你的應用必須自己做的 。每個指針還有一個ID映射,該映射在整個觸摸事件中始終保持爲 。您可以使用MotionEvent.getPointerId(index)使用 檢索每個指針的ID,並使用MotionEvent.findPointerIndex(id)爲指針ID 查找索引。

最好的解決方案應該是保存所有指針的狀態並更新/比較它們,您將收到一個新的TouchEvent。

檢查這個example

+0

我只從第一個指針(0)獲取數據,因爲我不需要精確的數據。我只需要檢測到第二個手指也被按下(case MotionEvent.ACTION_POINTER_2_DOWN :),然後我設置了一個變量,然後在動作上我的邏輯檢測是否有2個手指或1,但我需要替換ACTION_POINTER_2的東西其他..... – vallllll 2012-07-24 14:21:58

+0

我很確定你必須觸發'case MotionEvent.ACTION_DOWN',然後檢查檢索PointerId。 您的設備是否真的支持多點觸控? – Hartok 2012-07-24 14:42:17

0

MotionEvent.ACTION_DOWN僅用於第一個指針。 GetActionMasked()將爲後續指針返回 MotionEvent.ACTION_POINTER_DOWN

3

我正在自己的指針工作。你想要切換如下

switch(event.getAction() & MotionEvent.ACTION_MASK); 
    case MotionEvent.ACTION_POINTER_DOWN: 

ACTION_DOWN是關於第一個手指向下。 ACTION_POINTER_DOWN是關於第二根手指。

請參閱http://www.vogella.com/articles/AndroidTouch/article.html以獲得相當清晰的描述。