获取小米平板5pro屏幕触摸点

手机没获取没问题小米平板5pro一直获取不到如图所示图1是手机图二是平板图三是代码

img

img

img

img

该回答引用于gpt与自己的思路:

您好,我可以尝试为您解决这个问题。

根据您提供的代码和图片,看起来您正在使用Windows API函数 GetTouchInputInfo() 来获取触摸输入信息。然而,该函数仅适用于 Windows 操作系统,并且在 Android 系统或其他移动设备上不适用。

要在 Android 设备上获取触摸输入信息,您需要使用 Android 提供的触摸事件接口。具体来说,您可以注册一个 View.OnTouchListener 监听器来捕获触摸事件并处理它们。以下是一个示例代码,可以帮助您开始:

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
    private static final String TAG = "TouchTest";
    private static final int HISTORY_SIZE = 3;

    private TextView mTextView;
    private float[] mX = new float[HISTORY_SIZE];
    private float[] mY = new float[HISTORY_SIZE];
    private float[] mPressure = new float[HISTORY_SIZE];
    private int mPointerCount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = findViewById(R.id.textview);
        mTextView.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        final int action = event.getActionMasked();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_POINTER_DOWN: {
                final int pointerIndex = event.getActionIndex();
                final int pointerId = event.getPointerId(pointerIndex);
                mX[pointerId] = event.getX(pointerIndex);
                mY[pointerId] = event.getY(pointerIndex);
                mPressure[pointerId] = event.getPressure(pointerIndex);
                mPointerCount++;
                break;
            }
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_POINTER_UP: {
                final int pointerIndex = event.getActionIndex();
                final int pointerId = event.getPointerId(pointerIndex);
                mX[pointerId] = 0;
                mY[pointerId] = 0;
                mPressure[pointerId] = 0;
                mPointerCount--;
                break;
            }
            case MotionEvent.ACTION_MOVE: {
                for (int i = 0; i < event.getPointerCount(); i++) {
                    final int pointerId = event.getPointerId(i);
                    if (pointerId < HISTORY_SIZE) {
                        mX[pointerId] = event.getX(i);
                        mY[pointerId] = event.getY(i);
                        mPressure[pointerId] = event.getPressure(i);
                    }
                }
                break;
            }
        }

        // Display touch information on screen
        StringBuilder sb = new StringBuilder();
        sb.append("Pointers: ").append(mPointerCount).append("\n");
        for (int i = 0; i < HISTORY_SIZE; i++) {
            sb.append(String.format(Locale.US, "Pointer%d: (%.2f, %.2f, %.2f)\n",
                    i, mX[i], mY[i], mPressure[i]));
        }
        mTextView.setText(sb);

        return true;
    }
}

这个代码将在触摸时捕获所有手指的位置、压力等信息,并将它们显示在屏幕上。您可以根据自己的需求进行修改和扩展。

希望这能帮到您!

参考GPT和自己的思路:

根据代码和截图,可以发现问题可能在于获取事件的方式不一致导致触摸点无法获取。建议尝试使用同一种获取事件的方式,并检查相关代码是否正确。另外,也可以尝试使用多种方法获取触摸点,比如使用 onTouchEvent 方法等,以便更全面地了解触摸点情况。最后,如果问题仍无法解决,可能需要联系小米平板5pro的厂商或者技术支持部门,获取更详细的解决方案。

参考GPT和自己的思路:

根据您提供的情况,问题很可能出现在您的代码中。可能有两个原因:

  1. 您没有正确处理平板设备的触摸事件。事实上,平板设备的触摸事件和手机有很大的不同。对于一些特定的平板设备,您需要使用不同的方法来获取屏幕触摸点。具体来说,请看您的代码中是否有针对平板设备的特定处理方法。

  2. 您的代码在平板设备上运行时有问题。您的代码只能在手机上正确运行,这有可能是由于您的代码有些地方依赖了手机的硬件,而平板设备的硬件不同。这时候,您需要重新审视您的代码,并进行适当的调整,以适应平板设备的特点。

建议您仔细检查代码中的问题,并在针对平板设备的触摸事件处理方面加入适当的改进。

参考GPT和自己的思路:

根据您提供的截图和代码,可以看出可能存在以下问题:

  1. 小米平板5pro的屏幕分辨率可能与手机不同导致无法获取到正确的触摸坐标。
  2. 代码中使用了 MotionEventCompat.getActionIndex() 方法获取触摸点的索引,但可能不适用于小米平板5pro。

对于这个问题,可以尝试以下解决方案:

  1. 使用平板专属的屏幕分辨率。
  2. 使用 MotionEvent 的获取触摸点坐标方法,例如 getX() 和 getY() 方法,并结合 getActionMasked() 方法获取触摸事件类型。同时根据事件类型的不同来处理单指触摸和多指触摸。

具体实现方法可以参考 Android 官方文档,例如:https://developer.android.com/training/gestures/multi?hl=zh-cn。

参考GPT和自己的思路,您可以使用Android中的 MotionEvent 类来获取屏幕触摸点的位置。以下是一个简单的示例代码,演示如何在您的应用程序中获取触摸点的位置:

@Override
public boolean onTouchEvent(MotionEvent event) {
    int action = event.getActionMasked();
    int pointerIndex = event.getActionIndex();

    switch(action) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN:
            // A pointer has gone down (one or more new pointers have touched the screen).
            // Get its index and its position.
            int pointerId = event.getPointerId(pointerIndex);
            float x = event.getX(pointerIndex);
            float y = event.getY(pointerIndex);
            // Do something with the pointer position
            break;

        case MotionEvent.ACTION_MOVE:
            // One or more pointers have moved.
            // Loop through all the pointers and get their positions.
            for (int i = 0; i < event.getPointerCount(); i++) {
                pointerId = event.getPointerId(i);
                x = event.getX(i);
                y = event.getY(i);
                // Do something with the pointer position
            }
            break;

        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_POINTER_UP:
            // A pointer has gone up (one or more pointers have stopped touching the screen).
            // Get its index and its position.
            pointerId = event.getPointerId(pointerIndex);
            x = event.getX(pointerIndex);
            y = event.getY(pointerIndex);
            // Do something with the pointer position
            break;

        case MotionEvent.ACTION_CANCEL:
            // The current gesture has been canceled.
            // Do something to clean up any state related to this gesture.
            break;
    }

    return true;
}


在上面的示例代码中,MotionEvent对象表示屏幕上的一次触摸事件。您可以使用 getActionMasked() 方法来获取触摸事件的类型(例如,按下、移动、释放)。您还可以使用 getPointerId() 方法来获取触摸点的唯一标识符,并使用 getX() 和 getY() 方法来获取触摸点的 x 和 y 坐标。注意,在多点触控的情况下,您需要使用 getPointerCount() 方法来获取所有触摸点的数量,并使用一个循环来获取它们的位置。

请确保您的应用程序具有适当的权限来访问屏幕触摸事件。您可以在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

真是什么问题都回答,我用mac可以识别文字代码,你们行吗

看看平板上面是不是缺少什么权限或者屏幕的获取错误。