我正在尝试更改View
的背景颜色,该颜色充当与其他声音样本一起滴答作响的正方形。
当我去运行它时,它出现错误:
ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。
任何人都可以提供解决方案吗?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act2);
final View square = (View)findViewById(R.id.rec);
tone = new TimerTask() {
@Override
public void run() {
if (sound[0] % 4 != 0) {
s2.start();
sound[0] += 1;
square.setBackgroundColor(Color.parseColor("#ff0000"));
} else {
s2.start();
sound[0] = 1;
square.setBackgroundColor(Color.parseColor("#00ff00"));
}
}
};
}
代码的声音部分工作正常,只是当我尝试使用View
.
改为将 UI 相关代码移动到 UI 线程。您无法更新 UI 表单计时器任务
法典:
tone = new TimerTask() {
@Override
public void run() {
if (sound[0] % 4 != 0) {
s2.start();
sound[0] += 1;
runOnUiThread(new Runnable() {
@Override
public void run() {
square.setBackgroundColor(Color.parseColor("#ff0000"));
}
});
计时器任务中的 void run 方法位于新线程上,而不是 UI 线程上。您不能在此线程中设置背景颜色。您应该在 UI 线程中执行此操作,如下所示。
runOnUiThread(new Runnable() {
@Override
public void run() {
square.setBackgroundColor(Color.parseColor("#ff0000"));
}
});