0

こんにちは親愛なるプログラマー!

5 つの viewflipper の子の間でランダムな時間間隔でランダムに反転するアプリケーションのアニメーション メニューを作成しようとしています。各フリップの間に、フレームごとのドローアブルに基づくアニメーションを「挿入」したいと考えています。これまでのところ、アニメーション メソッドの呼び出しが "run" メソッドの最初にあるか最後にあるかに基づいて、ランダムな反転またはアニメーションのいずれかを表示できました。ハンドラーの各反復の「間」で実行されるようにする方法がわかりません。

コードは次のとおりです。

public class BTG extends Activity {

private ViewFlipper fliptest;
private Handler testHandler = new Handler();
private Random mRand = new Random();
private Random timerMenu = new Random();
int randomTime;
AnimationDrawable menuAnimation;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_btg);

    fliptest = (ViewFlipper) findViewById(R.id.menuFlipper);
    testHandler.postDelayed(mFlip, randomTime);


}

private Runnable mFlip = new Runnable() {

    @Override
    public void run() {
        //if this call is at the beginning, the menu only flips between the 5 first 
        //children of the viewflipper and the animation is never shown
        startAnimation();

        randomTime  = (timerMenu.nextInt(6) + 1) * 2000;
        System.out.println("executes the run method " + randomTime);
        fliptest.setDisplayedChild(mRand.nextInt(5));
        testHandler.postDelayed(this, (mRand.nextInt(6)+ 1) * 2000);
        //if this call is at the end, the menu only displays the animation 
        //which launches itself after a random time as set in the handler
        //startAnimation();


    }

    class Starter implements Runnable {
          public void run() {
              menuAnimation.start();
           }
       }

    private void startAnimation() {
        System.out.println("The start Animation method is run");
        fliptest.setDisplayedChild(5);
        menuAnimation = new AnimationDrawable();
        menuAnimation.addFrame(getResources().getDrawable(R.drawable.animate_menu_trans1), 100);
        menuAnimation.addFrame(getResources().getDrawable(R.drawable.animate_menu_trans2), 100);
        menuAnimation.addFrame(getResources().getDrawable(R.drawable.animate_menu_trans3), 100);
        menuAnimation.addFrame(getResources().getDrawable(R.drawable.animate_menu_trans1), 100);
        menuAnimation.addFrame(getResources().getDrawable(R.drawable.animate_menu_trans2), 100);
        menuAnimation.addFrame(getResources().getDrawable(R.drawable.animate_menu_trans3), 100);
        menuAnimation.setOneShot(true);

           ImageView imageView = (ImageView) findViewById(R.id.menu_animation);
           imageView.setImageDrawable(menuAnimation);
           imageView.post(new Starter());

    }    
};
4

1 に答える 1