2013-02-02 4 views
0

삼각형을 회전시키는 간단한 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 경우에만 시작을 저장했다 이것은 오프셋 된 각도가 이동 중에 다시 계산 되었기 때문에 모양이 회전하지 않는다는 점에서 작동하지 않았습니다.이 점에서 제가 결국 어떻게 끝났습니까?)

+0

ACTION_DOWN 만 표시됩니다. 언급 된 ACTION_MOVE은 어디에 있습니까? ACTION_MOVE – WarrenFaith

+0

내가 가지고 있었을 때 실제로는 ACTION_DOWN에서 아무것도하지 않고 (축을 제외하고) 아무것도하지 않습니다 (부록 참조). 내 문제는 ACTION_DOWN이 터치 드래그 리프트 이동 중에 지속적으로 사용된다는 것인데, 처음 터치하는 동안 한 번만해야합니다. (제 생각에는?) – Sam

+1

'getActionMasked()'를 시도 했습니까? 모든 ACTION_UP/DOWN/MOVE를 구현하고 기록하여 MOVE 및/또는 UP이 올바르게 호출되는지 확인하십시오. – WarrenFaith

답변

0

getAction() 대신 getActionMasked()를 사용해야합니다. WarrenFaith의 의견보기

0

스위치/케이스에 break 문을 입력하는 것을 잊었습니다. 따라서 ACTION_MOVE가 완료되면 ACTION_DOWN은 바로 다음에옵니다.

+0

실제로 이것을 시도했지만 도움이되지 않았습니다. 해결책은 워렌의 코멘트와 같았다. 감사. – Sam