1

毎秒変化するレイアウトの背景を点滅または点滅させる必要があります。私はこのコードを書きました:

int colours[]={0xff00ff00, 0xffff0000, 0xff0000ff,0xffffffff};
RelativeLayout fondo;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    fondo = (RelativeLayout) findViewById(R.id.fondo);
    this.fondo.setBackgroundColor(colours[0]);
    this.fondo.setOnTouchListener(this);
}

onTouch メソッドは次のとおりです。

public boolean onTouch(View v, MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_UP) {
        int i=1;
        long delay= 1000;
        long time = System.currentTimeMillis();

        while(true) {
            long time2 = System.currentTimeMillis();
            long time3 = (time2 - time);
            if (time3 > delay) {
                this.fondo.setBackgroundColor(colours[i]);
                Log.d("DEBUG", "EEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
                time = System.currentTimeMillis();
                i++;
                if (i >= colores.length)
                    i=0;
            }
        }
    }
    return true;
}

私の問題は、毎秒背景色を変更できないことですが、毎秒 Log.d("DEBUG") を書き込むことができます。

4

2 に答える 2

7

を使用する必要がありますAnimationDrawable

UI スレッドで無限ループを使用すると、ANR (Android Not Responding) ウィンドウが発生します

   public boolean onTouch(View v, MotionEvent event) {

        final int DELAY = 100;

        if(event.getAction() == MotionEvent.ACTION_UP) {


            RelativeLayout fondo = (RelativeLayout) findViewById(R.id.fondo);

            ColorDrawable f = new ColorDrawable(0xff00ff00);
            ColorDrawable f2 = new ColorDrawable(0xffff0000);
            ColorDrawable f3 = new ColorDrawable(0xff0000ff);
            ColorDrawable f4 = new ColorDrawable(0xff0000ff);

            AnimationDrawable a = new AnimationDrawable();
            a.addFrame(f, DELAY);
            a.addFrame(f2, DELAY);
            a.addFrame(f3, DELAY);
            a.addFrame(f4, DELAY);
            a.setOneShot(false);

            fondo.setBackgroundDrawable(a); // This method is deprecated in API 16
            // fondo.setBackground(a); // Use this method if you're using API 16
            a.start();
         }
         return true;
    }
于 2012-10-10T02:00:35.687 に答える
0

タイマーとハンドラーを使用する必要があります。ハンドラーで背景の色を変更します。ここに、必要に応じてカスタマイズできる良い例があります。

于 2012-10-10T01:58:15.793 に答える