【问题标题】:Android - State Selector Animations - Only animate de-press, NOT pressAndroid - 状态选择器动画 - 仅动画按下,不按下
【发布时间】:2014-11-07 22:55:25
【问题描述】:

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

使用此选择器,每次按钮更改状态时都会出现淡入淡出动画。换句话说,当从按下到按下时以及从按下到按下时,过渡都会动画。

现在,我的问题是:是否有可能使这些状态更改中只有一个具有动画效果?当用户按下按钮时,我希望在没有动画的情况下立即发生向下状态转换。当按钮被按下时,我希望 downstate 淡出而 normal state 淡入。可以这样做吗?

【问题讨论】:

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


    【解决方案1】:

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

    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>
    

    【讨论】:

    【解决方案2】:

    你可以这样做:

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

    【讨论】:

      【解决方案3】:
      <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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-18
        • 2021-04-09
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 2020-03-06
        相关资源
        最近更新 更多