未检测到安卓三指

  • 本文关键字:三指 android touch
  • 更新时间 :
  • 英文 :


我正在制作一款需要3根手指的android游戏。在我的设备(三星S3 mini, android 4.1.2)工作良好,getPointerCount()返回3,但在另一个设备(三星核心Prime, android 4.4.4), getPointerCount()返回总是2,似乎函数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;
        }
    }
}

android.hardware.touchscreen.multitouch.distinct特性在文档中定义如下(http://developer.android.com/guide/topics/manifest/uses-feature-element.html):

该应用程序在设备屏幕上使用先进的多点多点触控功能,例如完全独立地跟踪两个或多个点。这是多点触控功能的超集。

所以,假设你在你的manifest中请求了多点触摸(你应该做的),你不能依赖硬件来支持两个以上的触摸。

如果三个触摸是绝对必要的,那么你可以使用android.hardware.touchscreen.multitouch.jazzhand来代替,这保证了五个触摸。不幸的是,似乎没有一个方法使用manifest请求3个或更多不同的触摸

最新更新