2012-07-24 4 views
2

안녕 나는이 손가락이 화면에 접촉 할 때 감지하는 것을 시도하고있다 :안드로이드 터치 이벤트 포인터 아래

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; 

은} 당신은 index에 대해 서로 다른 값을 getPointerId(index)

답변

0

을 시도 했습니까?

아이디와 지수의 차이 참조 : 높은 수준에서 ID

색인을, 시간의 스냅 샷에서 터치 스크린 데이터는 터치 제스처가 포함 이후 즉시 유용하지 않을 수 있습니다 많은 모션 이벤트에 걸쳐있는 모션 포인터 인덱스는 복잡한 이벤트 전체에서 이 일치하는 것은 아니며, MotionEvent 내에 데이터의 위치가 임을 나타냅니다. 그러나 이것은 귀하의 애플 리케이션이 자체해야 할 일이 아닙니다. 또한 각 포인터에는 터치 이벤트에 지속되는 으로 유지되는 ID 매핑이 있습니다. MotionEvent.getPointerId (index)를 사용하여 각 포인터에 대해이 ID를 검색하고 MotionEvent.findPointerIndex (id)를 사용하여 포인터 ID 에 대한 색인을 찾을 수 있습니다.

최상의 해결 방법은 모든 포인터의 상태를 저장하고 새 TouchEvent를 받으면 업데이트/비교하는 것입니다.

확인하십시오. example.

+0

정확한 데이터가 필요하지 않으므로 첫 번째 포인터 (0)에서만 데이터를 가져옵니다. 두 번째 손가락 (또한 MotionEvent.ACTION_POINTER_2_DOWN :)이 눌린 것을 감지 할 필요가 있습니다. 그런 다음 변수를 설정 한 다음 두 손가락 또는 1이 있으면 내 논리를 감지하여 조치를 취합니다. 그러나 ACTION_POINTER_2를 무언가로 대체해야합니다. else ..... – vallllll

+0

'Case MotionEvent.ACTION_DOWN'을 트리거해야하고, PointerId를 검색하는지 확인해야합니다. 기기가 실제로 멀티 터치를 지원합니까? – Hartok

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을 참조하십시오.