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;
}
감사합니다. 처리기가 작업을 완료하는 것 같습니다. – FlingLandHo