备注
这个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>上。
网友评论