AnimatedStateListDrawable

作者: 难得糊涂与君勉 | 来源:发表于2018-01-15 15:05 被阅读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>上。

    相关文章

      网友评论

        本文标题:AnimatedStateListDrawable

        本文链接:https://www.haomeiwen.com/subject/dqnroxtx.html