0

私はアンドロイドでマルチタッチを勉強してきましたが、見つけた行のいくつかを理解できませんでした。グーグルを検索しましたが、その理解できるリソースを見つけることができませんでした。コードを投稿しています。

onTouch「メソッドの最初の2行」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;
}
}
4

1 に答える 1

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;**

詳細については、 リンク 1 リンク 2を参照してください。

于 2012-12-23T07:29:24.610 に答える