Android, honeycomb animation («Аниматоры могут запускаться только в циклических потоках») ошибка

#android #animation #looper

#Android #Анимация #циклический

Вопрос:

У меня был предыдущий проект, в котором я мог бы в общем виде использовать класс ObjectAnimator для анимации любого подобного класса

 ObjectAnimator oa = ObjectAnimator.ofFloat(testShape, "translateX", 0f, 000f);
oa.setDuration(1000l);
oa.setRepeatCount(ObjectAnimator.REVERSE);
oa.setRepeatMode(ObjectAnimator.RESTART);
oa.start();
  

… и это будет работать отлично, никаких проблем. Теперь, когда я пытаюсь запустить ту же настройку, я получаю

 W/dalvikvm(19053): threadid=10: thread exiting with uncaught exception (group=0x400d1760)
E/AndroidRuntime(19053): FATAL EXCEPTION: Animation Thread
E/AndroidRuntime(19053): android.util.AndroidRuntimeException: Animators may only be run on Looper threads
E/AndroidRuntime(19053):    at android.animation.ValueAnimator.start(ValueAnimator.java:900)
E/AndroidRuntime(19053):    at android.animation.ValueAnimator.start(ValueAnimator.java:931)
E/AndroidRuntime(19053):    at android.animation.ObjectAnimator.start(ObjectAnimator.java:282)
E/AndroidRuntime(19053):    at com.processing.test.Run.setup(Run.java:43)
  

Я пытался добавить Looper.prepare () и Looper.loop () в свои циклы рисования, но безрезультатно. Поскольку ранее мне вообще не приходилось использовать класс Looper, это нежелательный подход.

Может ли это быть проблемой версии с моей базовой библиотекой (в данном случае обработка -Android) или это связано с изменением Honeycomb с 3.0 на 3.1

Спасибо

Ответ №1:

Просматривая документы для ObjectAnimator, кажется, что ничего не изменилось: что вам, вероятно, просто нужно сделать, это убедиться, что вы выполняете вызов из потока пользовательского интерфейса: либо убедитесь, что он вызывается в методе обработчика событий, используйте экземпляр обработчика или выполните View.post() с Runnable, который фактически запускает анимацию. Вы внезапно начали вызывать start из другого местоположения?