ユーザー定義の場所を指すコンパスを作成しています。針を回転させるためにrotateanimationを使用しています。針が電話の方向を指しているとき、私は電話が私が望む方向を指していることを知っています。ただし、電話の方位角に関係なく、針が正しい方向を向くようにしたかったのです。
問題は、rotateanimationが実際の座標に従って針を回転させず、代わりに電話の画面を基準にしているように見えることです。したがって、針の58度の回転は、現実の世界では58度の回転と一致しません。これは本当ですか、それともコードを間違えていますか?
コンパスは、電話機の背面を表面に平らに置くことによって使用することを目的としています。また、方位角を出力しようとしましたが、次のようになります。
Azimuth Actual Phone angle
0 0
45 90
90 180
完全な円に近づくと、120から340の間で跳ね返ります。
コードは次のとおりです。
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;
方位角はセンサーからの電話の方位角であり、rotateはユーザーが指定した方向(北からの角度)であり、方向は針の必要な回転です。
rotateLastは針が最後にあった位置です。これを使用しないと、針が0度に戻り、ちらつきます。
おかげで、PSこれは私を夢中にさせています