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