0
我編寫了用於放大/縮小的代碼。它可以工作,但即使用一個手指放大/縮小,它應該只能用2個手指(多點觸控)工作。任何知道爲什麼?即使在單點觸控交互中也會發生多點觸控變焦
boolean surfaceTouchEvent(MotionEvent event) {
pointNum=event.getPointerCount();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
//User is pressing on finger
x0=event.getX(0);
y0=event.getY(0);
mode = false; //DRAG
break;
case MotionEvent.ACTION_POINTER_DOWN:
x1=event.getX(0);
x2=event.getX(1);
y1=event.getY(0);
y2=event.getY(1);
z4 = dist(x1, y1, x2, y2);
mode = true; // pinch
break;
case MotionEvent.ACTION_UP:
mode = false;
case MotionEvent.ACTION_POINTER_UP:
// User is released one of the fingers.
mode = false;
break;
case MotionEvent.ACTION_MOVE:
if (mode = false) {
// x1=event.getX(0)-x0;
//y1=event.getY(0)-y0;
}
if (mode = true) {
x1=event.getX(0);
x2=event.getX(1);
y1=event.getY(0);
y2=event.getY(1);
float z3 = dist(x1, y1, x2, y2);
if (z3 > z4) {
zoom += 0.1;
}
else if (z3 < z4) {
zoom -= 0.1;
}
}
break;
}
return super.surfaceTouchEvent(event);
}
我編輯如下代碼,但這次是不工作的,至少第一代碼的作品,但變焦反應奇怪,請大家幫忙
float x1,x2,y1,y2 = -1;
boolean surfaceTouchEvent(MotionEvent event) {
pointNum=event.getPointerCount();
if (pointNum >=2) {
x1=event.getX(0);
x2=event.getX(1);
y1=event.getY(0);
y2=event.getY(1);
z4 = dist(x1, y1, x2, y2);
if (z3 > z4) {
zoom += z3/z4;
}
else if (z3 < z4) {
zoom -= z3/z4;
}
}
else {
return false;
}
z3 = z4;
return super.surfaceTouchEvent(event);
}
,但首先我需要保存舊的位置,然後以比較新的舊的位置(當兩個手指移動變焦)來定義縮放的事情。在這種情況下,我應該在哪裏定義舊職位? – matarsak
將它們定義爲實例變量lastX1,lastX2和lastY1,lastY2,並使用值爲-1的值初始化它們,這些值不能通過觸摸屏分配。在你的代碼中分配它們。 – Tim