所以我试图在我的应用程序中创建一个“频闪”灯光效果。
为此,我需要一个时间延迟,一个100毫秒,另一个20毫秒。
这是我正在使用的代码。

Thread timer = new Thread();
    long longTime = 100;
    long shortTime = 20;
    for (int x = 0; x < 2000000; x++)
    {
        layout.setBackgroundColor(background);
        try {
            timer.sleep(longTime);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        layout.setBackgroundColor(backgroundBlack);
        try {
            timer.sleep(shortTime);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我遇到的问题是,当我单击按钮调用该代码时,什么都不会发生。所以我做了一些调试,很确定是计时调用。我以前从来没有用Java编程过,所以我不知道如何调用线程睡眠。

最佳答案

您可以使用如下的处理程序来实现这一点。

public class Strobe extends Activity {

    private LinearLayout mLinearLayout;

    private Handler mHander = new Handler();

    private boolean mActive = false;
    private boolean mSwap = true;

    private final Runnable mRunnable = new Runnable() {

        public void run() {
            if (mActive) {
                if (mSwap) {
                    mLinearLayout.setBackgroundColor(Color.WHITE);
                    mSwap = false;
                    mHander.postDelayed(mRunnable, 20);
                } else {
                    mLinearLayout.setBackgroundColor(Color.BLACK);
                    mSwap = true;
                    mHander.postDelayed(mRunnable, 100);
                }
            }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mLinearLayout = (LinearLayout) findViewById(R.id.strobe);
        startStrobe();
    }

    private void startStrobe() {
        mActive = true;
        mHander.post(mRunnable);
    }
}

为活动设置主题以使其全屏显示。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

08-03 17:35