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: 警告/dalvikvm(18083): threadid=7: キャッチされない例外で終了するスレッド (group=0x4001d7d0) エラー/AndroidRuntime(18083): 致命的な例外: スレッド 8 エラー/AndroidRuntime(18083): android.view.ViewRoot$CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。ERROR/AndroidRuntime(18083): android.view.ViewRoot.checkThread(ViewRoot.java:2811) で ERROR/AndroidRuntime(18083): android.view.ViewRoot.requestLayout(ViewRoot.java:594) で ERROR/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.