我可以在 Android Studio 中使用哪个组件来创建触摸板?

Which component can I use in Android Studio for the purpose of creating a touchpad?

我一直在 Android Studio 中寻找可用于创建触摸板的 View/Component。我需要跟踪鼠标移动的能力,以便我在服务器端使用该信息来处理它并模拟鼠标移动。

什么最适合这个目的?

那将是 ScrollView or a HorizontalScrollView

不幸的是,Shishdem 的回答并不令我满意。我基本上想要实现的是为学校项目制作触摸板原型。 ScrollView 包含要在其中滚动的元素,我需要跟踪适合我的服务器应用程序在 PC 上移动光标时处理的手指移动信息。

我在这里找到了解决方案:Track touch and pointer movements

我需要创建一个 android.view.VelocityTracker and track touch velocity to further send that data to my PC server and simulate mouse movements via java.awt.Robot within onTouchEvent。该组件可以是任何东西,在我的例子中是 Button

这里是 class 处理触摸板视图触摸事件的工作代码:

private VelocityTracker mVelocityTracker = null;
@Override
public boolean onTouchEvent(MotionEvent event) {
    int index = event.getActionIndex();
    int action = event.getActionMasked();
    int pointerId = event.getPointerId(index);

    switch(action) {
        case MotionEvent.ACTION_DOWN:
            if(mVelocityTracker == null) {
                mVelocityTracker = VelocityTracker.obtain();
            }
            else {
                mVelocityTracker.clear();
            }

            mVelocityTracker.addMovement(event);
            break;
        case MotionEvent.ACTION_MOVE:
            mVelocityTracker.addMovement(event);
            mVelocityTracker.computeCurrentVelocity(1000);

            // Log velocity of pixels per second
            // Those values can be used to be sent to the server
            Log.d("Velocity", "X velocity: " + mVelocityTracker.getXVelocity(pointerId));
            Log.d("Velocity", "Y velocity: " + mVelocityTracker.getYVelocity(pointerId));

            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_CANCEL:
            mVelocityTracker.recycle();
            mVelocityTracker = null;
            break;
    }
    return true;
}

万一崩溃

请注意,在上面的 link 示例中,没有这一行:

mVelocityTracker.recycle();
mVelocityTracker = null; // this line

但在我的例子中,如果我没有将 mVelocityTracker 分配给 null 每次回收,它会崩溃并出现以下错误:

2021-10-05 09:30:21.711 4385-4385/com.example.javaapp E/InputEventReceiver: Exception dispatching input event.
2021-10-05 09:30:21.711 4385-4385/com.example.javaapp E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
2021-10-05 09:30:21.713 4385-4385/com.example.javaapp E/MessageQueue-JNI: java.lang.IllegalStateException: Already in the pool!
        at android.util.Pools$SimplePool.release(Pools.java:120)
        at android.util.Pools$SynchronizedPool.release(Pools.java:179)
        at android.view.VelocityTracker.recycle(VelocityTracker.java:87)

关于该问题的更多信息:VelocityTracker causes crash on Android 4.4