我剛製作了一個快速系統,有兩個遊戲杆(一個用於移動,一個用於拍攝),他們使用多點觸控。但是,當你同時使用它們時,它們會相互干擾(你放慢速度,變得很奇怪等),並且想知道這是我的手機(Nexus One,2.3.6)還是一個問題問題與代碼:Android多點觸控故障
public void handleEvent(MotionEvent event) {
final int action = event.getAction();
switch(action & MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN: {
pointerID = event.getPointerId(0);
int tx = (int) event.getX(event.findPointerIndex(pointerID));
int ty = (int) event.getY(event.findPointerIndex(pointerID));
boolean reset = true;
if(tx >= (x - radius * 2) && (tx <= (x + radius * 2))) {
if(ty >= (y - radius * 2) && (ty <= (y + radius * 2))) {
dx = (tx - x);
dy = (ty - y);
reset = false;
}
}
if(reset) pointerID = -1;
break;
}
case MotionEvent.ACTION_POINTER_DOWN: {
if(pointerID == -1) {
final int pointerIndex = event.getActionIndex();
pointerID = event.getPointerId(pointerIndex);
int tx = (int) event.getX(pointerIndex);
int ty = (int) event.getY(pointerIndex);
if(tx >= (x - radius * 2) && (tx <= (x + radius * 2))) {
if(ty >= (y - radius * 2) && (ty <= (y + radius * 2))) {
dx = (tx - x);
dy = (ty - y);
}
}
}
break;
}
case MotionEvent.ACTION_MOVE: {
if(pointerID != -1) {
final int pointerIndex = event.findPointerIndex(pointerID);
int tx = (int) event.getX(pointerIndex);
int ty = (int) event.getY(pointerIndex);
if(tx >= (x - radius * 2) && (tx <= (x + radius * 2))) {
if(ty >= (y - radius * 2) && (ty <= (y + radius * 2))) {
dx = (tx - x);
dy = (ty - y);
}
}
}
break;
}
case MotionEvent.ACTION_POINTER_UP: {
final int pointerIndex = event.getActionIndex();
final int id = event.getPointerId(pointerIndex);
if(id == pointerID) {
dy = 0;
dx = 0;
pointerID = -1;
}
break;
}
case MotionEvent.ACTION_UP: {
if(-1 != pointerID) {
dy = 0;
dx = 0;
pointerID = -1;
}
break;
}
}
}
重要提示:
每個操縱桿是一個類,handleEvent方法被每操縱桿。
pointerID
是屬於每個操縱桿
dy
和dx
只是從操縱桿的中心的距離的int。
我不知道你是否意識到,但每個需要多點觸摸的項目都是一個類,所以每個遊戲杆都會調用「ACTION_MOVE」,並且只會在具有正確值的那個上運行指針ID。我已經在我的新手機和平板電腦上運行這個(可能稍微調整了..)代碼,並且它工作正常;即:我的Nexus One上的多點觸控至少部分出現故障。 – javanut13