Server sync... Block time in database: 1635010518, server time: 1653328094, offset: 18317576

Android анимации. Часть 2. Animator и State View


В прошлой статье мы разбирали как работать с простыми анимациями при помощи Animator’a. Сегодня подведем итоги и рассмотрим, как можно немного автоматизировать запуск анимаций.

Простая анимация. Animator - первая статья
Простая анимация. State View - вторая статья
Vector анимация. Стандартные решения – третья статья
VectorDrawable анимация. Управление анимацией. Хардкор – четвертая статья

Для этого нам нужно будет создать специальный класс, для управлениями анимациями при смене состояния view. Что сюда включается? К примеру, элемент был выключен (enable), выбран (selected), на него попадет фокус (focused), нажат (pressed) и прочие состояния. Единственный минус этого способа, он будет работать только на версиях Android 5 (API 21) и выше.

Приступим. Создадим файл state_animator.xml в res/animator. Внутри мы поместим код:

<?xml  >
<selector >
    <item >
        <set >
            <objectAnimator

                >

            <objectAnimator

                >
        </set>
    </item>
    <item
        >
        <set >
            <objectAnimator

                >

            <objectAnimator

                >
        </set>
    </item>
</selector>

Что мы сделали? Мы указали, что это разметка selector – то есть внутри у нас будет описаны анимации для разных состояний. Внутри у нас есть два item для состояния state_enabled="false" и state_enabled="true", то есть анимация, если картинка выключена и картинка включена. Внутри же item находится уже знакомый нам по прошлой статье objectAnimator (вы пробовали что-то анимировать уже? Надеюсь, что да).

Что делаем теперь? Нам необходимо где-то задействовать state_animator.xml. Где? В файле разметки активити или фрагмента. В моем случае в activity_main.xml. Ищем где у нас находится картинка и добавляем туда одну строку:

<ImageView
    …

    … />

Теперь также нужно менять состояние imageView. Сделаем это в коде при нажатии кнопки. Отследим нажатие и вставим туда одну строку кода (надеюсь, вы знаете, как это делать, если нет – пишите комментарии и я сделаю отдельную статью):

imageView.setEnabled(!imageView.isEnabled());

Посмотрим на результат?

Выводы:
При помощи Animator мы можем анимировать любые параметры объектов, а для некоторых из них есть удобные интерфейсы. Недостаток таких анимаций лишь один – в некоторой степени они требовательны к ресурсам.


Comments 6