Android - 状态选择器动画 - 仅动画消除,不按

时间:2014-11-07 22:55:26

标签: android android-animation android-button android-selector android-background

我有一个非常基本的选择器,我用它作为一些按钮来实现关闭状态的背景。这是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>

使用此选择器,每次按钮更改状态时都会发生淡入淡出动画。换句话说,转换将在从按下按下到按下时以及从按下按下到按下时都会生成动画。

现在,我的问题是:它是否有可能使这些状态变化只有其中一个动画?当用户按下按钮时,我希望在没有动画的情况下立即进行状态转换。当按钮被按下时,我希望当正常状态消失时,状态会淡出。可以这样做吗?

3 个答案:

答案 0 :(得分:12)

选择器上的动画:(我的drawables是颜色)

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>

答案 1 :(得分:8)

您可以这样做:

<?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之后可用。

this official guide

中的更多信息

答案 2 :(得分:2)

<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:enterFadeDuration="@android:integer/config_shortAnimTime"
android:exitFadeDuration="@android:integer/config_longAnimTime">
<item android:state_pressed="true" >
    <shape>
        <gradient
            android:startColor="#ffffff"
            android:endColor="#917777"
            android:angle="270" />
    </shape>
</item>
<item android:state_pressed="false" >
    <shape>
        <gradient
            android:startColor="#ffffff"
            android:endColor="#d2adad"
            android:angle="270" />
    </shape>
</item>
<item android:state_checked="true">
    <color android:color="@color/black"/>
</item>
</selector>