2013-11-20 2 views
4

У меня есть смесь анимаций, работающих по различным сценариям. В качестве примера;Android: Почему объектные аниматоры сохраняют начальное значение?

У меня есть анимация затухания и угасания на маленьком круговом растровом изображении. На ACTION_DOWNfade-in должен начинаться и по телефону ACTION_UP, , когда заканчиваются затухающие концы, затемнение должно бежать. НО, если пользователь поднимает палец перед концами затухания, он должен остановиться там (fadein.cancel()), постепенное исчезновение должно начинаться с значения THAT alpha. Я не хочу новый объект Animator каждый раз, когда я определил аниматора, как это в конструкторе

fadein = Objectanimator.ofFloat(bitmap, "alpha", 1.0f); 
    fadeOut = Objectanimator.ofFloat(bitmap, "alpha", 0.0f); 

Что происходит, если я произвожу вопрос, как упоминалось (подбирая палец быстро), то Fadeout аниматор возьмите альфа-значение, где fade-in остановился, и он будет СОЗДАТЬ. То есть, 2-й раз, он НЕ подберет новую альфу! Почему это? Каков обходной путь? Создавать новые объекты каждый раз?

ответ

3

Класс ObjectAnimator изменяет атрибуты представления, поэтому он обновляет свойство представления с использованием метода setter свойства Object (согласно official Android Guide).

Итак, когда анимация fadein выполняется, значение альфа постоянно изменяется, и когда выполняется fadein.cancel(), альфа-значение View перестает обновляться. Скажем, это значение X.

Итак, когда вы начинаете fadeOut, он оживляется от X до 0.0f.

Какое обходное решение?

Для fadeOut используйте two values imply a starting and ending values

fadeOut = Objectanimator.ofFloat(bitmap, "alpha", 1.0f, 0.0f); 
+1

Как вы анимировать растровое изображение? –

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