1

私のAndroidアプリケーションで簡単な運命の輪を作ろうとしています。人物名入りの丸みのある画像になります。下のボタンを押すと、画像が(中心を中心に)回転し始めます。ローテーションはランダムな時間後に停止する必要があるため、もちろん常に同じ人物名であるとは限りません. 今のところ、以下の 1-2-3-4 の画像を使用しています。

出力例

これに関するほぼすべてのトピックを見てきましたが、ランダムにする方法がわかりません。現時点では、常に同じ角度で停止します。たとえば、常に番号 1 で停止します。

私が持っているコード:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_who, container, false);


   final ImageView alberto = (ImageView)view.findViewById(R.id.alberto);
    Button spin =(Button)view.findViewById(R.id.spin);

    final RotateAnimation anim = new RotateAnimation(0f,generateRandomNumber(), Animation.RELATIVE_TO_SELF, 0.5f,
            Animation.RELATIVE_TO_SELF, 0.5f);
    anim.setFillAfter(true);
    anim.setDuration(1000);


    spin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            alberto.startAnimation(anim);
        }
    });

    return view;
}

public float generateRandomNumber() {

    Random rand = new Random();
    int randomNum = rand.nextInt((360 - 0) + 1);

    return (float)randomNum;
}

}

基本的に、私は RotateAnimation に乱数を与えるので、回転を停止する場所が常に同じであるとは限りません。しかし、これは機能していません。たとえば、常に nr 1 で停止すると言ったからです。アニメーションの長さを変更すると、出力が同じではないことがわかりました! そのため、持続時間に乱数を入れようとしましたが、うまくいきません.ところで、ランダムであると言っている他の投稿をチェックしましたが、そうではありません.

理想的な状況では、アニメーションは速く始まり、遅くなり、停止します。

事前に割り当ててくれてありがとう!!!

4

1 に答える 1

1

次のことを試すことができます。

private static final float BASE_ROTATION_DEGREES = 3600;
private static final int DURATION = 1000;

//...

spin.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        float deg = alberto.getRotation() + BASE_ROTATION_DEGREES + ((float)Math.random() * 360F);
        alberto.animate().rotation(deg).setDuration(DURATION)
            .setInterpolator(new AccelerateDecelerateInterpolator());
    }
});

補間器を別のものに変更して、別の効果を得ることができます。

編集:最初の回転だけが複数回転するという問題を修正するために編集されました。これは、回転値がすぐに高くなることを意味することに注意してください。問題にするべきではありませんが、覚えておく価値があります。

別の編集: 見たい場合は、こちらのサンプルアプリ/ソースコード。これは私のエミュレータで問題なく動作します。

于 2015-11-02T13:01:03.987 に答える