Android - 状态选择器动画 - 仅对取消按下状态进行动画处理,而不是按下状态。

19

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

36

选择器上的动画:(我的可绘制对象是颜色)

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>

3
非常简单!没有花哨,但是像樱桃一样美味。 - Mihir Patel
我在哪里可以找到有关在“selector”标签中添加“enterFadeDuration”的文档?@Psych - amlwin
@AungMyoLwin https://developer.android.com/reference/android/R.attr#exitFadeDuration - Jakub S.
谢谢,但它不包括像 exitFadeDuration 可以在 selector 标签下的内容。@Psych - amlwin

16

你可以像这样做:

<?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及以上版本。

有关更多信息,请参阅此官方指南


8
<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接