1

誰かが私を助けてくれるかどうか疑問に思っていました.有用な助けをどこでも探していましたが、何も見つかりませんでした. 4 つのView要素 ( Button) があり、それらをランダムな順序で次々とアニメーション化する必要があります。を待ってみましAnimation.hasEnded()たが、アプリ全体がフリーズします。AnimationListenerまた、からブール値を変更するのを待ってみましたonAnimationEnd()が、それもアプリをフリーズさせました。Thread.sleep()とfor の両方でSystemClock.sleep()同じ結果が得られました。誰か助けてくれませんか?

4

1 に答える 1

2

これが私がそれを行う方法です:

まず、ランダム ボタン配列のメンバーを作成します。

private Button[] mRandomButtonsOrder;

次に、ランダムなボタンの順序を初期化します。

List<Button> myButtons = new ArrayList<Button>();

        myButtons.add(btn1); // Add all your buttons to this array.
        myButtons.add(btn2);
        myButtons.add(btn3);
        myButtons.add(btn4);

        mRandomButtonsOrder = new Button[myButtons.size()]; // This is a member of the activity!

        Random random = new Random();
        int index; 

        for (int i = 0; i < myButtons.size(); i++)
        {
            do
            {
                index = random.nextInt() % mRandomButtonsOrder.length;
            } while (mRandomButtonsOrder[index] != null);

            mRandomButtonsOrder[index] = myButtons.get(0);
            myButtons.remove(0);
        }

        initiateAnimationOnButton(0);

さて、ここに initationAnimationOnButton メソッドがあります:

private void initiateAnimationOnButton(final int buttonIndex)
    {
        TranslateAnimation animation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta); // Just a sample using TranslateAnimation
        animation.setDuration(1000);

        if (buttonIndex < mRandomButtonsOrder.length - 1)
        {
            animation.setAnimationListener(new TranslateAnimation.AnimationListener() 
            {

                @Override
                public void onAnimationStart(Animation animation) { }

                @Override
                public void onAnimationRepeat(Animation animation) { }

                @Override
                public void onAnimationEnd(Animation animation) 
                {
                    initiateAnimationOnButton(buttonIndex + 1);                         
                }
            });
        }

        Button btn = mRandomButtonsOrder[buttonIndex];
        btn.startAnimation(animation);
    }

お役に立てれば :)

于 2013-10-03T01:46:07.923 に答える