MultiTouch - 为什么最多只有四个手指

时间:2014-01-08 22:24:50

标签: java android

我已经尝试实现多点触控程序来测试和理解android的工作原理。我尝试了以下代码,但是当我运行它时,屏幕上只识别出十个可能的ID中的四个,其他行只是我设置的默认值。

这是代码: -

package com.example.chester;

import android.annotation.TargetApi;
 import android.app.Activity;
 import android.os.Bundle;
  import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnTouchListener;
import android.widget.TextView;

@TargetApi(8)
 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());

}


public 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();
}

public boolean onTouch(View v, MotionEvent event) {
    int action = event.getAction() & MotionEvent.ACTION_MASK;
    int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_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;
}

}

编辑:我正在使用HTC Sensation和android 4.0.3

1 个答案:

答案 0 :(得分:3)

您可以拥有的触摸量是特定于设备的(取决于他们如何使用设备和部件),而android(作为移动操作系统)最多支持10个。