0

私は何かをテストしようとしていますが、必要なのは黒と白の画面の間を 1 秒間隔で点滅するアクティビティだけです。postDelayed を見てきましたが、それをどのように実装するかはまだわかりません。これは私が今持っているものですが、「点滅」しません

主な活動:

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;

public class Blink extends Activity {
    int i = 0;

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

        while (i == 0) {
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                public void run() {
                    changeColor();
                }
            }, 1000);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void changeColor() {
        if (findViewById(R.id.mylayout).getBackground().equals("#ffffff")) {
            findViewById(R.id.mylayout).setBackgroundResource(Color.BLACK);
        } else {
            findViewById(R.id.mylayout).setBackgroundResource(Color.WHITE);

        }
    }
}

更新されたコード:

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;

public class Blink extends Activity {
    int i = 0;

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

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                changeColor();
            }
        }, 1000);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void changeColor() {
        if (i == 0) {
            findViewById(R.id.mylayout).setBackgroundColor(Color.WHITE);
            i++;
        } else if (i == 1) {
            findViewById(R.id.mylayout).setBackgroundColor(Color.BLACK);
            i--;

        }
    }
}

更新 2:

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;

public class Blink extends Activity {
    int i = 0;
    Boolean bool = false;

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

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                changeColor();
            }
        }, 1000);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void changeColor() {
        if (bool) {
            findViewById(R.id.mylayout).setBackgroundColor(Color.WHITE);
            bool = false;
        } else {
            findViewById(R.id.mylayout).setBackgroundColor(Color.BLACK);
            bool = true;

        }
    }
}
4

1 に答える 1

0

ここで尋ねるべき正確な質問を絞り込みました:なぜこの postDelayed は永久に実行されないのですか?

このコードを修正するにはhandler.postDelayed(this, 1000);、run の中に追加するだけで済みました。

于 2013-03-13T22:29:37.223 に答える