我正在制作一款需要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个或更多不同的触摸