2013-12-13 3 views
1

Итак, есть несколько вопросов об анимации, не заканчивающихся при использовании cancel() на них. Вам также необходимо позвонить clearAnimation на просмотр. Может кто-нибудь объяснить, почему? Мне также очень странно, что View должен знать, что его оживляет.Почему ObjectAnimator.cancel() не всегда работает?

+0

Какая ОС вы используете? Я никогда не испытывал этого. 'clearnAnimation' в представлениях не использует фреймворк 'Animator'. Они используют старую структуру анимации, поэтому ни одна из них не должна влиять на другую. – DeeV

+0

Android 4.0+. Может быть, стоит отметить, что я отменяю анимацию при нажатии клавиши. – gruszczy

+0

Итак, когда вы вызываете отмену без clearAnimation, анимация продолжается до завершения? – DeeV

ответ

0

Вы вызываете ясную анимацию, чтобы сбросить матрицу преобразования, которую использует вид, чтобы преобразовать ее холст во время анимации. Основная проблема заключается в том, что старая система анимации Android - это дерьмо, поскольку она полагалась на анимацию «моментального снимка» фактического представления. Что касается отмены, когда вы вызываете отмену, то происходит то, что вы останавливаете runnable, который применяет шаги вашей анимации. Конечно, вы не можете быть уверены, в каком состоянии ваша анимация становится остановлена ​​

+0

Это все по-другому для ObjectAnimators. Они изменяют физические свойства View – DeeV

+0

Это зависит от версии os, в которой вы работаете. NineOldAndroids повторно реализует объектные аниматоры на старых версиях Android с использованием старой системы анимации –

+0

Ok. Он не сказал, что использует NineOldAndroids. Хотя, будет ли она по-прежнему иметь ту же проблему на 3.0+? Я бы подумал, что NineOldAndroids по умолчанию будет поддерживать платформу Animator в этом случае. – DeeV

0

Чтобы было ясно:

  • The View Animation Framework, также известный как "старые рамки анимации", только оживляют переводы зрения, и а не фактические свойства. Итак, скажем, вы анимируете местоположение представления на X-размерности: значение свойства X вида остается тем же.

    В связи с вашим вопросом это означает, что отмена анимации возвращает вид назад в исходное положение. Поэтому не имеет значения, когда анимация была отменена.

  • Объектная анимация, представленная в Android 3.0, анимирует актуальные свойства. Это означает, что при отмене анимации вид остается в соответствующем положении. Таким образом, вы, возможно, не знаете точно, КОГДА анимация была отменена, но вы можете четко узнать, ГДЕ она нарисована прямо сейчас.

  • Если вам нужна анимация объектов для старых версий Android, и, откровенно говоря, зачем идти любым другим способом, вы можете использовать библиотеку 9OldAndroids.

Mor на разницу между рамками анимации here.

Смежные вопросы