Итак, есть несколько вопросов об анимации, не заканчивающихся при использовании cancel()
на них. Вам также необходимо позвонить clearAnimation
на просмотр. Может кто-нибудь объяснить, почему? Мне также очень странно, что View
должен знать, что его оживляет.Почему ObjectAnimator.cancel() не всегда работает?
ответ
Вы вызываете ясную анимацию, чтобы сбросить матрицу преобразования, которую использует вид, чтобы преобразовать ее холст во время анимации. Основная проблема заключается в том, что старая система анимации Android - это дерьмо, поскольку она полагалась на анимацию «моментального снимка» фактического представления. Что касается отмены, когда вы вызываете отмену, то происходит то, что вы останавливаете runnable, который применяет шаги вашей анимации. Конечно, вы не можете быть уверены, в каком состоянии ваша анимация становится остановлена
Это все по-другому для ObjectAnimators. Они изменяют физические свойства View – DeeV
Это зависит от версии os, в которой вы работаете. NineOldAndroids повторно реализует объектные аниматоры на старых версиях Android с использованием старой системы анимации –
Ok. Он не сказал, что использует NineOldAndroids. Хотя, будет ли она по-прежнему иметь ту же проблему на 3.0+? Я бы подумал, что NineOldAndroids по умолчанию будет поддерживать платформу Animator в этом случае. – DeeV
Чтобы было ясно:
The View Animation Framework, также известный как "старые рамки анимации", только оживляют переводы зрения, и а не фактические свойства. Итак, скажем, вы анимируете местоположение представления на X-размерности: значение свойства X вида остается тем же.
В связи с вашим вопросом это означает, что отмена анимации возвращает вид назад в исходное положение. Поэтому не имеет значения, когда анимация была отменена.
Объектная анимация, представленная в Android 3.0, анимирует актуальные свойства. Это означает, что при отмене анимации вид остается в соответствующем положении. Таким образом, вы, возможно, не знаете точно, КОГДА анимация была отменена, но вы можете четко узнать, ГДЕ она нарисована прямо сейчас.
Если вам нужна анимация объектов для старых версий Android, и, откровенно говоря, зачем идти любым другим способом, вы можете использовать библиотеку 9OldAndroids.
Mor на разницу между рамками анимации here.
- 1. Почему repaint() не всегда работает?
- 2. Почему document.ready не всегда работает?
- 3. Почему QSplashscreen не всегда работает?
- 4. Усечение не всегда работает: почему?
- 5. Почему текущийModalViewController не всегда работает?
- 6. Почему функция preventDefault не работает всегда?
- 7. Почему мой php `if` не всегда работает?
- 8. Угловой isUnchanged - почему это не всегда работает
- 9. Почему мой IMessageFilter не всегда работает?
- 10. Почему Driver.SwitchTo не всегда работает в селене?
- 11. Почему оператор if всегда работает?
- 12. condition_variable не всегда работает
- 13. image.convertTo не всегда работает
- 14. dispatch_after не всегда работает
- 15. QProcess() не всегда работает
- 16. AJAX не всегда работает
- 17. Javascript не всегда работает
- 18. Socket.io не всегда работает
- 19. tickSubdivide не всегда работает?
- 20. Ajax не всегда работает
- 21. Application_OnError не всегда работает
- 22. tkinter.messagebox.showinfo не всегда работает
- 23. ImagePath не всегда работает
- 24. overridePendingTransition() не всегда работает
- 25. SendKeys не всегда работает
- 26. onbeforeunload не всегда работает
- 27. TransformToAncestor не всегда работает
- 28. OnSharedPreferenceChangeListener не всегда работает
- 29. CoffeeScript не всегда работает
- 30. OnFocusChange не всегда работает
Какая ОС вы используете? Я никогда не испытывал этого. 'clearnAnimation' в представлениях не использует фреймворк 'Animator'. Они используют старую структуру анимации, поэтому ни одна из них не должна влиять на другую. – DeeV
Android 4.0+. Может быть, стоит отметить, что я отменяю анимацию при нажатии клавиши. – gruszczy
Итак, когда вы вызываете отмену без clearAnimation, анимация продолжается до завершения? – DeeV