UIAndroid开发Android知识

AnimatedStateListDrawable

2018-01-15  本文已影响36人  难得糊涂与君勉
总结

备注

这个AnimatedStateListDrawable是在API21提出,针对于Android 5.0

其他Draw文章参考:
Android中Drawable整体介绍

Drawable包含一组可绘制的关键帧,其中当前显示的关键帧是基于当前状态集来选择的。 关键帧之间的动画可以可选地使用过渡元素来定义。

这个drawable可以用<animated-selector>元素在XML文件中定义。 每个关键帧Drawable都是在一个嵌套的<item>元素中定义的。 转换在嵌套的<transition>元素中定义

XML中

<?xml version="1.0" encoding="utf-8"?>
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/off" android:drawable="@drawable/test" android:state_checked="false"/>
    <item android:id="@+id/on"  android:drawable="@drawable/xlj" android:state_checked="true"/>
    <transition
        android:fromId="@id/off"
        android:toId="@id/on"
        >
        <animation-list >
            <item android:drawable="@drawable/red_drawable" android:duration="100"/>
            <item android:drawable="@drawable/blue_drawable" android:duration="100"/>
            <item android:drawable="@drawable/green_drawable" android:duration="100"/>
            <item android:drawable="@drawable/xlj" android:duration="60"/>
        </animation-list>
    </transition>
</animated-selector>

(1)<animated-selector>

StateListDrawable的根布局是<selector>,现在是<animated-selector>,加了一个动画。
<item>的使用和<selector>一样,多了一个<transition>过渡标签,必须用到的是android:fromId与android:toId,表示的是下面标签<animation-list>从哪里开始,到哪里结束

(2)<animation-list>

可以理解为帧动画一样,里面包含一系列的item,使用android:drawable与 android:duration来分别设定特定的图片与展示的时间。

给View使用

<ImageView
        android:clickable="true"
        android:id="@+id/my_ImageView"
        android:layout_width="match_parent"
        android:layout_height="49dp"
        android:background="@drawable/animated_state_list_drawable"
        />

代码

  private static final int[] STATE_CHECKED = new int[]{android.R.attr.state_checked};
  private static final int[] STATE_UNCHECKED = new int[]{};
 //mImageView.setImageState中参数必须是int[]。

  mImageView = (ImageView) findViewById(R.id.my_ImageView);
        mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (flag) {
                    mImageView.setImageState(STATE_UNCHECKED, true);
                    flag = false;
                } else {
                    mImageView.setImageState(STATE_CHECKED, true);
                    flag = true;
                }
            }
        });

效果描述

点击图片之后,会经过几个颜色变化,但是并不会停止到你设定的off状态的那个drawable,但是会停止到你设置的<animation-list>中你设置的最后一个<item>上。

上一篇下一篇

猜你喜欢

热点阅读