삼각형을 회전시키는 간단한 OpenGL 'app'을 만듭니다. 첫 번째 터치에서 터치 위치가 일치하는 각도를 저장하고 싶습니다. 그런 다음 동작시 현재 위치에서 첫 번째 터치 각도를 뺀 각도만큼 모양을 회전합니다.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;
}
내 코드를 잘못인가, 또는이 일부입니다 에뮬레이터의 이상한 행동? (I은 현재 안드로이드 장치에 액세스 할 수 없습니다.)
(부록을 :. 제가 원래 새로운 각도를 계산하고 렌더링을위한 MotionEvent.ACTION_MOVE
경우와 완전히 위를 구현하기 위해 시도한 ACTION_DOWN
경우에만 시작을 저장했다 이것은 오프셋 된 각도가 이동 중에 다시 계산 되었기 때문에 모양이 회전하지 않는다는 점에서 작동하지 않았습니다.이 점에서 제가 결국 어떻게 끝났습니까?)
ACTION_DOWN 만 표시됩니다. 언급 된 ACTION_MOVE은 어디에 있습니까? ACTION_MOVE – WarrenFaith
내가 가지고 있었을 때 실제로는 ACTION_DOWN에서 아무것도하지 않고 (축을 제외하고) 아무것도하지 않습니다 (부록 참조). 내 문제는 ACTION_DOWN이 터치 드래그 리프트 이동 중에 지속적으로 사용된다는 것인데, 처음 터치하는 동안 한 번만해야합니다. (제 생각에는?) – Sam
'getActionMasked()'를 시도 했습니까? 모든 ACTION_UP/DOWN/MOVE를 구현하고 기록하여 MOVE 및/또는 UP이 올바르게 호출되는지 확인하십시오. – WarrenFaith