0

ユーザー定義の場所を指すコンパスを作成しています。針を回転させるために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これは私を夢中にさせています

4

1 に答える 1

1

私はそれを理解しました、私の数学はすべて間違っていました、そして私は方位角が回転にどのように影響したかを誤解しました。

画像を方位角だけに回転させたところ、針が北を向いていることがわかりました。私がする必要があるのは、ユーザーの指示を追加することだけでした。私が使用していた数学により、針が予測できない方法で回転しました。

答えは簡単です:

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

-方位角は、rotateanimationが反時計回りに回転する方法によるものです。

于 2012-07-05T04:57:34.673 に答える