我正在創建一個簡單的OpenGL「應用程序」來旋轉三角形。我希望在第一次觸摸時保存觸摸位置對應的角度。然後,在運動時,將形狀旋轉對應於當前位置的角度減去第一次觸摸的角度。ACTION_DOWN的行爲像ACTION_MOVE
這是我的理解,第一步應該在MotionEvent.ACTION_DOWN
,第二步在MotionEvent.ACTION_MOVE
。但是,在運動過程中似乎正在調用ACTION_DOWN。也就是說,下面的代碼將導致形狀旋轉的手指拖動(我理解,這隻會旋轉到初始觸摸的位置):
private double mTheta;
@Override
public boolean onTouchEvent(MotionEvent e) {
super.onTouchEvent(e);
float x = e.getX();
float y = e.getY();
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
x -= getWidth()/2;
y -= getHeight()/2;
mTheta = Math.atan2(-x,-y) * 180.0f/Math.PI;
GL20Renderer.mAngle = (float) mTheta;
requestRender();
}
return true;
}
是我的代碼錯了,或者這模擬器的怪異行爲? (我目前沒有訪問Android設備。)
(附錄:我原來試圖完全實現上述,用MotionEvent.ACTION_MOVE
的情況來計算新的角度和渲染。ACTION_DOWN
的情況只是保存起始這是行不通的,因爲形狀沒有旋轉 - 因爲偏移角度在移動過程中被重新計算 - 這是我在這一點上的結果。)
我只看到ACTION_DOWN。提到的ACTION_MOVE在哪裏?你實際上只在ACTION_DOWN中做了一些事情,ACTION_MOVE – WarrenFaith
我曾經擁有它(見附錄),但沒有任何東西(除了保存這些座標)。我的問題是,ACTION_DOWN正在連續使用的過程中,它應該只是一次,在第一次觸摸(我認爲?) – Sam
您嘗試過'getActionMasked()'嗎?執行所有ACTION_UP/DOWN/MOVE並記錄它們以查看MOVE和/或UP是否被正確調用。 – WarrenFaith