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

标签 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;
}

}

编辑:我使用的是 Android 4.0.3 的 HTC Sensation

最佳答案

您可以进行的触摸次数取决于设备(取决于设备的制造方式和使用的部件),而 Android(作为移动操作系统)最多支持 10 次。

关于java - MultiTouch - 为什么最多只有四个手指,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007893/

相关文章:

java - Android 如何使用 MediaRecorder 录制音频并输出为原始 PCM?

android - 如何在没有互联网访问的情况下创建跨平台多人游戏

java - 适用于 Java 或 .NET 的良好电子商务平台

java - OkHttp3 的非代理主机

java - Wicket 在新选项卡上打开可添加书签的页面

javascript - 使用 Promise.then 时是否可以保留在单击事件调用堆栈中?

php - 在 mySQL blob 中存储图像

android - 如何在 Retrofit 中使用 ssl 证书发出 https 请求

java - 没有引用的类会被编译吗?

java - GetConnection 始终返回 NULL 值,JAVA 11