0

패드에 onTouchListener를 설정 한 후 MotionEvent.ACTION_MOVE의 방향 조이스틱 (노브와 패드로 구성) 을 가지고 position_x, position_y, 거리 및 각도를 계산하여 방향을 얻습니다. [1 -8]. 방향 [1-8]이 주어지면 특정 동작을 계속 실행하고 싶습니다. 하지만 MotionEvent.ACTION_MOVE는 손가락이 움직이는 동안에 만 실행됩니다.가상 조이스틱을 사용하여 위도와 경도 좌표를 이동하는 방법은 무엇입니까?

latung의 움직임을 연속적으로 실행하려면 어떻게해야합니까?

--Lat/LNG 운동 (D = 방향) -

private void movement(int d, double lat, double lng) { 
     if (d==1) { //up 
      lat = lat + 0.0000002;} 
     else if (d==2){ //upright 
      lat = lat + 0.0000001; 
      lng = lng + 0.0000001; 
     } 
     else if (d==3) { //right 
      lng = lng + 0.0000002; 
     } 
     else if (d==4) { //downright 
      lng = lng + 0.0000001; 
      lat = lat - 0.0000001; 
     } 
     else if (d==5) { //down 
      lat = lat - 0.0000002; 
     } 
     else if (d==6) { //downleft 
      lat = lat - 0.0000001; 
      lng = lng - 0.0000001; 
     } 
     else if (d==7) { //left 
      lng = lng - 0.0000002; 
     } 
     else if (d==8) { //upleft 
      lat = lat + 0.0000001; 
      lng = lng - 0.0000001; 
     } 
} 

--action_move, getangle, direction--

case MotionEvent.ACTION_MOVE: { 

        position_x = (int) (pad.getX() + pad.getWidth()/2 - knob.getWidth()/2 * -1 - knob.getX() - pad.getPivotX()); 
        position_y = (int) (pad.getY() + pad.getHeight()/2 - knob.getHeight()/2 * -1 - knob.getY() - pad.getPivotY()); 
        distance = (float) Math.sqrt(Math.pow(position_x, 2) + Math.pow(position_y, 2)); 
        angle = (float) getangle(position_x, position_y); 
        knob.setX(event.getX() + pad.getX() - knob.getWidth()/2); 
        knob.setY(event.getY() + pad.getY() - knob.getHeight()/2); 
        direction(); 
        movement(direction(), lat, lng); 


private double getangle(float x, float y) { 
    if (x >= 0 && y >= 0) return Math.toDegrees(Math.atan(y/x)); 
    else if (x < 0 && y >= 0) return Math.toDegrees(Math.atan(y/x)) + 180; 
    else if (x < 0 && y < 0) return Math.toDegrees(Math.atan(y/x)) + 180; 
    else if (x >= 0 && y < 0) return Math.toDegrees(Math.atan(y/x)) + 360; 
    return 0; 
} 

private int direction() { 
    if (distance > 50) { 
     if (angle >= 67.5 && angle < 112.5) return 1; 
     else if (angle >= 112.5 && angle < 157.5) return 2; 
     else if (angle >= 157.5 && angle < 202.5) return 3; 
     else if (angle >= 202.5 && angle < 247.5) return 4; 
     else if (angle >= 247.5 && angle < 292.5) return 5; 
     else if (angle >= 292.5 && angle < 337.5) return 6; 
     else if (angle >= 337.5 || angle < 22.5) return 7; 
     else if (angle >= 22.5 && angle < 67.5) return 8; 
    } else if (distance <= 50) { //knob at rest in middle 
      return 0; 
    } 
    return 0; 
} 

답변

0

당신은 다음과 같은 질문 최고의 대답을 확인하고 적용 할 수 있습니다 쓰레드를 사용하는 논리가 같고 UI 쓰레드에 while 루프가있다.

Continuous "Action_DOWN" in Android

+0

감사합니다. 처리기가 작업을 완료하는 것 같습니다. – FlingLandHo