动画选择器/状态转换

时间:2012-02-10 01:30:03

标签: android animation android-listview transition

我有一个简单的ListView选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/yellow_arc" android:state_activated="true"/>
    <item android:drawable="@drawable/yellow_nonarc" android:state_activated="false"/>

</selector>

我希望在视图状态从激活状态更改为未激活状态时反映这些可绘制视图之间的过渡,反之亦然。

如果您在API演示中运行example,则会在视图的激活状态发生变化时看到明显的淡入/淡出动画。

所以我想要的是在视图状态发生变化时的自定义动画。我认为它应该通过xml来完成,但我找不到办法。

提前致谢。

  

修改

我想我找到了一些有用的内容activated_background.xml \Android\android-sdk\platforms\android-API_VERSION\data\res\drawable中包含<{p}}

<selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:exitFadeDuration="@android:integer/config_mediumAnimTime">
    <item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" />
    <item android:drawable="@color/transparent" />
</selector>

因此API演示中的示例通过声明exitFadeDuration来实现此淡出动画。但是,这并不是我想要的 ..我想声明自定义动画用于状态drawable之间的转换,因为淡入/淡出动画没有看起来很适合我的绘画。

4 个答案:

答案 0 :(得分:6)

在api 21“StateListAnimator”

中添加

sass-loader

我知道这是一个老问题,但这可能有助于未来的人们这样做。

答案 1 :(得分:3)

我猜TransitionDrawable可以帮助您实现这一目标。

你可以在这里查看答案: Animate change of view background color on Android

答案 2 :(得分:1)

以现代方式(自 api 21 起)的示例:

 <?xml version="1.0" encoding="utf-8"?>
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/checked"
        android:drawable="@drawable/check_box_on"
        app:check="true" />  <!-- this is custom state. You can use android:state_checked="true"-->
    <item
        android:id="@+id/unchecked"
        android:drawable="@drawable/check_box_off"
        app:check="false" />
    <transition
        android:drawable="@drawable/toggle_checkbox_unchecked_checked"
        android:fromId="@+id/unchecked"
        android:toId="@+id/checked" />
    <transition
        android:drawable="@drawable/toggle_checkbox_checked_unchecked"
        android:fromId="@+id/checked"
        android:toId="@+id/unchecked" />
</animated-selector>

动画选择器的文档:link

例如,transition drawable 是这样的:

<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    android:drawable="@drawable/check_box_on">
    <target android:name="check_box_on_path">
        <aapt:attr name="android:animation">
            <objectAnimator
                android:duration="@android:integer/config_shortAnimTime"
                android:interpolator="@android:interpolator/decelerate_cubic"
                android:propertyName="trimPathEnd"
                android:valueFrom="1"
                android:valueTo="0"
                android:valueType="floatType" />
        </aapt:attr>
    </target>
</animated-vector>

动画矢量文档:link

答案 3 :(得分:0)

这是你想要的褪色吗?

我想这与textSwitcher的工作原理相同,也许你想把它改成ViewSwitcher,淡化是以编程方式完成的


Animation in = AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in);
        Animation out = AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out);

        mSwitcher1.setInAnimation(in);
        mSwitcher1.setOutAnimation(out);