Я создаю приложение, которое может отправлять и получать OSC.
Я использую JavaOSC, он отлично отвечает моим потребностям.
Я отправляю значение цвета в сообщении OSC, а также получаю их.
Я отправляю цвет из палитры цветов на основе этого палитры цветов
http://code.google.com/p/color-picker-view/
это прекрасно работает.
Моя проблема:
- Когда я выбираю цвет в палитре цветов, я устанавливаю фон макета (там, где находится палитра цветов) с помощью:
private ColorPickerView.OnColorChangedListener colorListener = new ColorPickerView.OnColorChangedListener () {
@Override
public void onColorChanged(int color) {
caller.sending("color", color);
mScreen.setBackgroundColor(color);
}
};
где mScreen - линейный вывод
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: поток завершается с необработанным исключением (группа = 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.java:7535)
ОШИБКА / AndroidRuntime (18083): на android.view.View.setBackgroundColor (View.java:7429)
ОШИБКА / AndroidRuntime (18083): в com.taprik.Remote.RemoteMain $ 4.acceptMessage (RemoteMain.java:202)
ОШИБКА / AndroidRuntime (18083): на com.illposed.osc.utility.OSCPacketDispatcher.dispatchMessage (Неизвестный источник)
ОШИБКА / AndroidRuntime (18083): на com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket (Неизвестный источник)
ОШИБКА / AndroidRuntime (18083): на com.illposed.osc.utility.OSCPacketDispatcher.dispatchBundle (Неизвестный источник)
ОШИБКА / AndroidRuntime (18083): на com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket (Неизвестный источник)
ОШИБКА / AndroidRuntime (18083): на com.illposed.osc.OSCPortIn.run (неизвестный источник)
ОШИБКА / AndroidRuntime (18083): на java.lang.Thread.run (Thread.java:1096)
WARN / ActivityManager (6722): принудительно завершить действие com.taprik.Remote / .RemoteMain