Android - Анимация селектора состояния - только анимировать нажатие, НЕ нажимать

У меня есть очень простой селектор, который я использую в качестве фона для некоторых кнопок для достижения состояния «вниз». Вот xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:exitFadeDuration="@android:integer/config_mediumAnimTime">
    <item android:drawable="@color/home_button_blue_down" android:state_selected="true" />
    <item android:drawable="@color/home_button_blue_down" android:state_pressed="true" />
    <item android:drawable="@color/home_button_blue" />
</selector>

С этим селектором анимация затухания будет происходить каждый раз, когда кнопка меняет состояние. Другими словами, переход будет анимироваться как при переходе от нажатого к нажатому, так и при возврате от нажатого к нажатому.

Теперь мой вопрос: возможно ли сделать так, чтобы только одно из этих изменений состояния анимировалось? Когда пользователь нажимает кнопку, я хочу, чтобы переход в нижнее состояние происходил немедленно, без анимации. Когда кнопка нажимается, я хочу, чтобы нижнее состояние исчезало, а нормальное состояние возвращалось. Можно ли это сделать?


person Reid Conner    schedule 07.11.2014    source источник


Ответы (2)


Анимации на селекторе: (мои рисунки были цветами)

De-Press (Out)
android:exitFadeDuration="@android:integer/config_shortAnimTime"
Press (In)
android:enterFadeDuration="@android:integer/config_shortAnimTime"

Полный пример:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
      android:enterFadeDuration="@android:integer/config_shortAnimTime"
      android:exitFadeDuration="@android:integer/config_shortAnimTime">

<item android:state_checked="false" android:drawable="@color/transparent"/>
<item android:state_checked="true"  android:drawable="@drawable/circle_blue"/>
</selector>
person Jakub S.    schedule 05.04.2017
comment
так просто! ничего особенного, но добавляет вишенки на торт :) - person Mihir Patel; 07.09.2018
comment
где я могу найти документы для добавления enterFadeDuration в тег selector? @Psych - person amlwin; 15.10.2020
comment
Спасибо, но это не включает, например, exitFadeDuration может быть под тегом selector @Psych - person amlwin; 15.10.2020

Вы можете сделать что-то вроде этого:

<?xml version="1.0" encoding="utf-8"?>
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/selected"
        android:state_selected="true"
        android:drawable="@color/home_button_blue_down"
        />

    <item android:id="@+id/usual"
        android:drawable="@android:color/transparent"
        />

    <transition
        android:fromId="@+id/usual"
        android:toId="@+id/selected" >
        <animation-list>
            <!--fill in your animation here-->
        </animation-list>
    </transition>
</animated-selector>

Имейте в виду, что animated-selector доступен только после API 21.

Дополнительные сведения см. в этом официальном руководстве.

person vedant    schedule 03.09.2015