2012-07-05 5 views
0

사용자 정의 위치를 ​​가리키는 나침반을 만들고 있습니다. 회전 니 메이션을 사용하여 바늘을 회전 시켰습니다. 바늘이 전화 방향으로 향할 때 전화가 내가 원하는 방향을 가리키고 있다는 것을 압니다. 그러나 바늘이 전화기의 방위각과 관계없이 정확한 방향을 가리 키기를 바랬습니다.android compass rotateanimation

문제는 rotationanimation이 실제 좌표에 따라 바늘을 회전시키지 않고 대신 휴대 전화 화면과 관련이있는 것입니다. 그래서 바늘의 58도 회전은 실제 세계에서 58도 회전과 일치하지 않습니다. 이것이 사실입니까, 아니면 제 코드에서 실수를 저지르고 있습니까?

나침반은 휴대 전화를 평평하게 뒤집어서 사용하기위한 것입니다. 또한 방위를 출력 시도하고 그것은 다음과 같이 읽습니다

direction = 360 - azimuth + rotate; 

RotateAnimation animate = new RotateAnimation(rotateLast, direction, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
      animate.setFillAfter(true); 
      animate.setInterpolator(new LinearInterpolator()); 
      animate.setDuration(10); 
      needle.startAnimation(animate); 

      rotateLast = direction; 
:
Azimuth   Actual Phone angle 
0      0 
45      90 
90      180 

그것이 여기에 코드입니다

(120) 사이에 340 반사 다시 완전한 원에 근접하는

방위각은 센서의 휴대 전화 방위각이며 회전은 사용자 지정 방향 (북쪽도)이며 방향은 바늘의 필요한 회전입니다.

rotateLast는 바늘이 있던 마지막 위치입니다. 바늘이 없으면 바늘이 0 도로 돌아가고 깜박이기 때문에 이것을 사용하고 있습니다.

감사합니다. P. 이것은 나를 미치게했다.

답변

1

나는 그것을 이해했다. 나의 수학은 완전히 틀렸다. 그리고 방위각이 회전에 어떻게 영향을 주는지 오해했다.

이미지를 방위각으로 회전 시켰을 때 북쪽을 가리키는 바늘이 나온 것을 알았습니다. 내가해야 할 일은 사용자 방향을 추가하는 것뿐입니다. 제가 사용했던 수학은 바늘이 예기치 못한 방식으로 회전하게했습니다.

대답

는 단순히 :

RotateAnimation animate = new RotateAnimation(-azimuth+rotation, -azimuth+rotation, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 

-azimuth 때문에 rotateanimation이 시계 반대 방향으로 회전하는 방법이다.

+1

흠 왜 같은 값으로 fromDegree, toDegree를 사용합니까? 그것은 그 위치로 향하는가? –