0

ボタンを押すと背景色が変わるアプリが欲しいです。500ミリ秒後、2000ミリ秒間背景色を黒に変更したいと思います。そして、ユーザーがそれを終了するまで、プロセス全体をもう一度繰り返します。

次のコードがありますが、思ったとおりに機能していません。

private void set() {
    rl.setBackgroundColor(Color.WHITE);
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    rl.setBackgroundColor(Color.BLACK);
                    set(); // can I do that?
                }
            });             
        }
    }, 500);    
}

誰かが私を正しい方向に向けることができますか?だから私は欲しい:

  1. いくつかのコードを実行します
  2. X時間が経過した後、別のコードを実行したいのですが、X時間その状態を維持する必要があります
  3. ユーザーがそれをキャンセルするまでプロセスを繰り返します。
4

2 に答える 2

4

このようなものはうまくいくはずだと思います

    Handler handler = new Handler();
Runnable turnBlack = new Runnable(){

    @Override
    public void run() {
        myView.setBackgroundColor(Color.BLACK);
        goWhite();
    }};

    Runnable turnWhite = new Runnable(){

        @Override
        public void run() {
            myView.setBackgroundColor(Color.White);
            goBlack();
        }};

public void goBlack() {
    handler.postDelayed(turnBlack, 500);
}

public void goWhite() {
    handler.postDelayed(turnWhite, 2000);
}
于 2013-03-12T14:46:00.893 に答える
1

AnimationDrawableを使用してこれを行うためのはるかに簡単な方法があります。

    AnimationDrawable drawable = new AnimationDrawable();
    ColorDrawable color1 = new ColorDrawable(Color.YELLOW);
    ColorDrawable color2 = new ColorDrawable(Color.BLACK);

    // First color yellow for 500 ms
    drawable.addFrame(color1, 500);

    // Second color black for 2000 ms
    drawable.addFrame(color2, 2000);

    // Set if animation should loop. In this case yes it will
    drawable.setOneShot(false);

    Button btn = (Button)findViewById(R.id.button1);
    btn.setBackground(drawable);
    findViewById(R.id.buttonLan).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Start animation
            ((AnimationDrawable)v.getBackground()).start();
        }
    });
于 2013-03-12T14:43:36.890 に答える