2012-12-23 35 views
0

我一直在研究Android上的多點觸控,但是我找不到一些我發現的線條。我搜索了谷歌,但無法找到可以理解的資源。我張貼代碼。瞭解Android中的多點觸控

我瞭解大部分的部分,除了「頭兩行onTouch法」,if (event.getAction() != MotionEvent.ACTION_MOVE && i != pointerIndex)case MotionEvent.ACTION_MOVE:

請解釋。 感謝您的幫助~~

package --- ; 

--imports-- 

@TargetApi(5) 
public class MultiTouchTest extends Activity implements OnTouchListener { 
StringBuilder builder = new StringBuilder(); 
TextView textView; 
float[] x = new float[10]; 
float[] y = new float[10]; 
boolean[] touched = new boolean[10]; 
int[] id = new int[10]; 

private void updateTextView() { 
    builder.setLength(0); 
    for (int i = 0; i < 10; i++) { 
     builder.append(touched[i]); 
     builder.append(", "); 
     builder.append(id[i]); 
     builder.append(", "); 
     builder.append(x[i]); 
     builder.append(", "); 
     builder.append(y[i]); 
     builder.append("\n"); 
    } 
    textView.setText(builder.toString()); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    textView = new TextView(this); 
    textView.setText("Touch and drag(multiple fingers supported!"); 
    textView.setOnTouchListener(this); 
    setContentView(textView); 
    for (int i = 0; i < 10; i++) { 
     id[i] = -1; 
    } 
    updateTextView(); 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    int action = event.getAction() & MotionEvent.ACTION_MASK; 
    int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; 
    int pointerCount = event.getPointerCount(); 
    for (int i = 0; i < 10; i++) { 
     if (i >= pointerCount) { 
      touched[i] = false; 
      id[i] = -1; 
      continue; 
     } 

     if (event.getAction() != MotionEvent.ACTION_MOVE 
       && i != pointerIndex) { 

      continue; 
     } 
     int pointerId = event.getPointerId(i); 
     switch (action) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_POINTER_DOWN: 
      touched[i] = true; 
      id[i] = pointerId; 
      x[i] = (int) event.getX(i); 
      y[i] = (int) event.getY(i); 
      break; 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_POINTER_UP: 
     case MotionEvent.ACTION_OUTSIDE: 
     case MotionEvent.ACTION_CANCEL: 
      touched[i] = false; 
      id[i] = -1; 
      x[i] = (int) event.getX(i); 
      y[i] = (int) event.getY(i); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      touched[i] = true; 
      id[i] = pointerId; 
      x[i] = (int) event.getX(i); 
      y[i] = (int) event.getY(i); 
      break; 
     } 

    } 
    updateTextView(); 

    return true; 
} 
} 

回答

1
/*Extract the index of the pointer that touch the sensor 
    Return the masked action being performed, without pointer index 
    information. 
    May be any of the actions: ACTION_DOWN, ACTION_MOVE, ACTION_UP, 
    ACTION_CANCEL, ACTION_POINTER_DOWN, or ACTION_POINTER_UP. 
    And return the index associated with pointer actions.*/ 

**int action = event.getAction() & MotionEvent.ACTION_MASK;** 

    /* Extract the index of the pointer that left the touch sensor 
    For ACTION_POINTER_DOWN or ACTION_POINTER_UP as returned by getActionMasked(), 
    this returns the associated pointer index. The index may be used with 
getPointerId(int), getX(int), getY(int), getPressure(int), and getSize(int) 
to get information about the pointer that has gone down or up.*/ 

**int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;** 

欲瞭解更多詳情,請參閱: Link 1 Link 2

+0

抱歉,但由 「前兩個onTouch方法行」 我的意思'INT行動= event.getAction( )&MotionEvent.ACTION_MASK; int pointerIndex =(event.getAction()&MotionEvent.ACTION_POINTER_ID_MASK)>> MotionEvent.ACTION_POINTER_ID_SHIFT;' – RE60K