Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
mstorm
6 лет назад

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 version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true">
        <set android:ordering="together">
            <objectAnimator
                android:duration="250"
                android:interpolator="@android:anim/decelerate_interpolator"
                android:propertyName="scaleX"
                android:valueTo="1"
                android:valueType="floatType"/>

            <objectAnimator
                android:duration="250"
                android:interpolator="@android:anim/decelerate_interpolator"
                android:propertyName="scaleY"
                android:valueTo="1"
                android:valueType="floatType"/>
        </set>
    </item>
    <item
        android:state_enabled="false">
        <set android:ordering="together">
            <objectAnimator
                android:duration="250"
                android:interpolator="@android:anim/accelerate_interpolator"
                android:propertyName="scaleX"
                android:valueTo="0"
                android:valueType="floatType"/>

            <objectAnimator
                android:duration="250"
                android:interpolator="@android:anim/accelerate_interpolator"
                android:propertyName="scaleY"
                android:valueTo="0"
                android:valueType="floatType"/>
        </set>
    </item>
</selector>

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

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

<ImageView
    …
    android:stateListAnimator="@animator/state_animator"
    … />

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

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

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

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

13
0.000 GOLOS
На Golos с February 2018
Комментарии (6)
Сортировать по:
Сначала старые