2013-03-01 2 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

Add ** возвращает истину; ** в методе 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

спасибо за ответ, но этот код показывает действие указателя вниз на одно касание, а также на multi touch, я хочу что-то, что может помочь мне дать разные значения для action_down и action_pointer_down. и ваш код также работает только один раз .. его показывающая сила закрывается при втором касании –