我正在构建一个可以发送和接收 OSC 的应用程序。我正在使用 JavaOSC,它完全符合我的需求。
我在 OSC 消息中发送颜色值,也接收它们。
我从基于此颜色选择器 http://code.google.com/p/color-picker-view/的颜色选择器发送颜色 ,效果很好。
我的问题是:
- 当我在颜色选择器中选择颜色时,我正在设置布局的背景(颜色选择器所在的位置)视图:
私有 ColorPickerView.OnColorChangedListener colorListener = new ColorPickerView.OnColorChangedListener(){
@Override
public void onColorChanged(int color) {
caller.sending("color", color);
mScreen.setBackgroundColor(color);
}
};
其中 mScreen 是一个 LinearLyout
mScreen = (LinearLayout) findViewById(R.id.myScreen);
它按预期工作。
- 当我收到一条带有颜色的 OSC 消息时,我也想更改背景,但它崩溃了。
我的听众是
OSCListener 监听器 = 新 OSCListener() {
public void acceptMessage(java.util.Date time, OSCMessage message) {
//en cas de message vide
if (message.getArguments().length == 0) return;
//sinon on recupere les elements et on les tries
Object[] args = message.getArguments();
if (args[0].toString().contains("alpha")) Log.i("receiver osc", "Message received!");
//Instructions
if (args[0].toString().contains("color")) {
int color = (Integer)args[1];
//mColorPickerView.setColor((Integer)args[1]);
mScreen.setBackgroundColor(color);
}
else return;
}
您可以在下面找到崩溃报告。函数 setBackgroundColor 是否需要在特定函数中才能正常工作(例如在 onClick 函数中)或在屏幕上重绘某些内容时?
崩溃报告
08-05 15:18:15.035: WARN/dalvikvm(18083): threadid=7: 线程退出未捕获异常 (group=0x4001d7d0) 错误/AndroidRuntime(18083): 致命异常: Thread-8 错误/AndroidRuntime(18083): android.view.ViewRoot$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触摸其视图。错误/AndroidRuntime(18083):在 android.view.ViewRoot.checkThread(ViewRoot.java:2811) 错误/AndroidRuntime(18083):在 android.view.ViewRoot.requestLayout(ViewRoot.java:594) 错误/AndroidRuntime(18083) : 在 android.view.View.requestLayout(View.java:8180) 错误/AndroidRuntime(18083): 在 android.view.View.requestLayout(View.java:8180) 错误/AndroidRuntime(18083): 在 android.view。 View.requestLayout(View.java:8180) 错误/AndroidRuntime(18083): 在 android.view.View.setBackgroundDrawable(View.