【发布时间】:2014-01-06 12:38:45
【问题描述】:
我想在安卓屏幕上定期显示一个白色矩形;或更改背景颜色。例如,每 500 毫秒,我希望屏幕颜色从黑色变为白色,持续大约 200 毫秒,然后变回黑色。
最好的方法是什么?我确实尝试了异步任务,但得到一个错误,只有原始线程可以触摸视图。我有一个类似的 asynctask,它听起来是周期性的音调,而且效果很好。
解决方案:
在响应者的帮助下,我创建了两个计时器,一个用于黑色,一个用于白色,从而解决了我的问题。黑色的开始延迟了我想要显示白屏的持续时间。两者具有相同的执行率,因此显示白屏,duration ms 后显示黑屏。例如,屏幕为黑色,但每秒闪烁白色,持续 200 毫秒。
@Override
protected void onResume() {
super.onResume();
mBlackTimer = new Timer();
mBlackTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
view.setBackgroundColor(Color.parseColor("#000000"));
}
});
}
}, duration, (long) (1000 / visionPeriod));
mWhiteTimer = new Timer();
mWhiteTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
view.setBackgroundColor(Color.parseColor("#ffffff"));
}
});
}
}, 0, (long) (1000 / visionPeriod));
}
【问题讨论】:
-
后台可以访问ui属性,但是要先访问ui线程,调用getActivity().runOnUiThread();如果您想更改某些内容,并将等待逻辑放在该线程之外
标签: android android-asynctask android-activity periodic-task