未检测到android三个手指

vltsax25  于 2023-01-19  发布在  Android
关注(0)|答案(1)|浏览(145)

我正在开发一款需要3个手指的安卓游戏。在我的设备(三星S3 mini,安卓4.1.2)上运行良好,getPointerCount()返回3,但在另一台设备(三星酷睿Prime,安卓4.4.4)上,getPointerCount()总是返回2,似乎在第3次触摸时没有调用函数onTouchEvent(MotionEvent e)。为什么会这样?谢谢帮助。
我用途:

class worldGL extends GLSurfaceView {
    world activity;
    world_r renderer;
    ctrl controller;

    public worldGL(Context context){
        super(context);

        this.renderer = new world_r(context);
        setRenderer(this.renderer);

        this.activity = (world) context;
        this.controller = new ctrl();
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        this.controller.setControllerStatus(e, this.renderer.width, this.renderer.height, this.renderer);

        return true;
    }
}

以及:

public void setControllerStatus(MotionEvent e, int width, int height, world_r renderer) {
    int pointerIndex = MotionEventCompat.getActionIndex(e);
    int pointerId = MotionEventCompat.getPointerId(e, pointerIndex);
    int xPos = (int) MotionEventCompat.getX(e, pointerIndex);
    int yPos = (int) MotionEventCompat.getY(e, pointerIndex);

    int maskedAction = MotionEventCompat.getActionMasked(e);

    Log.d("Index", Integer.toString(pointerIndex));
    Log.d("ID", Integer.toString(pointerId));
    Log.d("X", Integer.toString((int) e.getX(pointerIndex)));
    Log.d("Y", Integer.toString((int) e.getY(pointerIndex)));
    Log.d("Count", Integer.toString((int) e.getPointerCount()));

    switch (maskedAction) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN: {
            //code                  
            break;
        }
        case MotionEvent.ACTION_MOVE: {
            //code      
            break;
        }
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_POINTER_UP: {
            //code                  
            break;
        }
        case MotionEvent.ACTION_OUTSIDE: {
            break;
        }
    }
}
4uqofj5v

4uqofj5v1#

android.hardware.touchscreen.multitouch.distinct特性在文档(http://developer.android.com/guide/topics/manifest/uses-feature-element.html)中定义如下:
该应用程序在设备屏幕上使用先进的多点多点触摸功能,例如完全独立地跟踪两个或多个点。这是多点触摸功能的超集。
因此,假设您已经在清单中请求了多点触摸(您应该这样做),您不能依赖硬件来支持两个以上的触摸。
如果三次触摸是绝对必要的,那么你可以使用android.hardware.touchscreme.multitouch.jazzhand来代替,它保证了五次触摸,不幸的是,似乎没有一个方法使用清单来请求三次或更多不同的触摸。

相关问题