Android, сотовая анимация («Аниматоры могут работать только в потоках Looper») - PullRequest
1 голос
/ 10 июня 2011

У меня был предыдущий проект, в котором я мог в общем случае использовать класс 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 Ответ

1 голос
/ 10 июня 2011

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

...