2013-03-01 3 views
4

하나의 상대 레이아웃 인 두 개의 이미지 버튼에서 두 번의 터치를 감지하려고했습니다. 문제는 두 버튼 모두 action_down 값을 표시하지만 아무런 동작 포인터를 내리지 않는 것입니다. 다음과 같이android multitouch, 작업 포인터가 제대로 작동하지 않습니다.

내 코드는 다음과 같습니다

private int getIndex(MotionEvent event) { 
    int idx = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>  MotionEvent.ACTION_POINTER_INDEX_SHIFT; 
    return idx; 
} 

@Override 
public boolean onTouch(View paramView, MotionEvent paramMotionEvent) { 
    // TODO Auto-generated method stub 
// Boolean state=false; 
// int pointerCount = paramMotionEvent.getPointerCount(); 
    boolean val = false; 
    int pointerIndex = paramMotionEvent.getAction() & MotionEvent.ACTION_MASK; 

    switch(pointerIndex) 
    { 
    case MotionEvent.ACTION_DOWN :{ 

      Log.i("fil", "action dowm");  
     break; 
    } 
    case MotionEvent.ACTION_POINTER_DOWN :{ 
     int id = paramMotionEvent.getPointerId(getIndex(paramMotionEvent)); 
      Log.d("fil", "Other point down ["+id+"]"); 
    Log.i("fil", "action pointer down");  
    break; 
    } 
    case MotionEvent.ACTION_POINTER_UP :{ 
     int id = paramMotionEvent.getPointerId(getIndex(paramMotionEvent)); 
      Log.d("fil", "Other point down ["+id+"]"); 
      Log.i("fil", "action pointer up"); 
      break; 
    } 
    case MotionEvent.ACTION_UP :{ 

      Log.i("fil", "action up"); 
     break; 
    } 

    } 


'my xml' 





<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" 
android:gravity="center"> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" > 

</RelativeLayout> 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/ic_launcher" /> 

<ImageView 
    android:id="@+id/imageView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="100dp" 
    android:background="@drawable/ic_launcher" /> 

+0

추가는 ** true를 반환; 진정한 가치를주고 나서 .. 당신의 OnTouch 방법에 ** – Numair

+1

을, 문제는 동일하게 유지됩니다. –

+0

그런 다음 코드를 게시하면 onTouch 메서드에 문제가 없습니다. – Numair

답변

0
StringBuilder sb = new StringBuilder(); 
TextView tv; 
int upPI = 0; 
int downPI = 0; 
boolean inTouch = false; 
String result = ""; 

@Override 
public boolean onTouch(View view, MotionEvent event) { 

int actionMask = event.getActionMasked(); 
int pointerIndex = event.getActionIndex(); 
int pointerCount = event.getPointerCount(); 

switch (actionMask) { 
case MotionEvent.ACTION_DOWN: 
    inTouch = true; 
case MotionEvent.ACTION_POINTER_DOWN: 
    downPI = pointerIndex; 
    break; 

case MotionEvent.ACTION_UP: 
    inTouch = false; 
    sb.setLength(0); 
case MotionEvent.ACTION_POINTER_UP: 
    upPI = pointerIndex; 
    break; 

case MotionEvent.ACTION_MOVE: 
    sb.setLength(0); 

    for (int i = 0; i < 10; i++) { 
    sb.append("Index = " + i); 
    if (i < pointerCount) { 
     sb.append(", ID = " + event.getPointerId(i)); 
     sb.append(", X = " + event.getX(i)); 
     sb.append(", Y = " + event.getY(i)); 
    } else { 
     sb.append(", ID = "); 
     sb.append(", X = "); 
     sb.append(", Y = "); 
    } 
    sb.append("\r\n"); 
    } 
    break; 
} 
result = "down: " + downPI + "\n" + "up: " + upPI + "\n"; 

if (inTouch) { 
    result += "pointerCount = " + pointerCount + "\n" + sb.toString(); 
} 
tv.setText(result); 
return true; 
} 
+2

답장을 보내 주셔서 감사합니다.하지만이 코드는 멀티 터치뿐만 아니라 싱글 터치에서도 값이 작게 표시됩니다. action_down 및 action_pointer_down에 고유 한 값을 부여하는 데 도움이되는 것이 필요합니다. 그리고 코드는 한 번만 작동합니다 .. 두 번째 터치에서 닫히는 힘을 보여줍니다. –

관련 문제