所以我想在我的应用程序中创建一个“频闪”灯光效果。
要做到这一点,我需要一个时间延迟,一个是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编程,所以我不确定如何调用Thread Sleep。
答案 0 :(得分:4)
您可以使用以下处理程序来实现此目的。
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"
答案 1 :(得分:1)
我认为这篇文章会对你有所帮助。 http://oreilly.com/catalog/expjava/excerpt/index.html 特别是这个 http://oreilly.com/catalog/expjava/excerpt/index.html#EXJ-CH-6-FIG-1
答案 2 :(得分:1)
您的问题是您没有在线程中运行。为了在线程中运行代码,您必须覆盖它的run()方法。根据您当前的代码,以下内容可能会捕获您想要执行的操作。
Thread timer = new Thread(){
public void run(){
long longTime = 100;
long shortTime = 20;
for (int x = 0; x < 2000000; x++)
{
layout.setBackgroundColor(background);
try {
Thread.sleep(longTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
layout.setBackgroundColor(backgroundBlack);
try {
Thread.sleep(shortTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
timer.start();
但是,线程与Android操作系统不能很好地兼容。对于您的应用程序,最好使用Android服务。请参阅http://developer.android.com/guide/topics/fundamentals/services.html。