Android开发艺术探索读书笔记 第六章 Android的Drawable

Drawable表示可以在Canvas上进行绘制的抽象的概念。

非图片类型Drawable占用空间小,可以减少apk大小。

BitmapDrawable表示一张图片,对应xml标签

NinePatchDrawable,表示一张.9图,,在bitmap标签中也可以使用.9图。

ShapDrawable表示以颜色构造的图形,可以纯色,也可以渐变。

LayerDrawable表示层次化的drawable集合,下面的item会覆盖上面的item。

StateListDrawable对应,可以根据view的状态自动选择drawable。

LevelListDrawable,对应, item有maxLevel和minLevel属性,可以通过drawable的setLevel切换drawable。范围是0~10000。

TransitionDrawable,对应,用于实现两个Drawable之间的淡入淡出效果。

如果我想在ImageView显示图片的时候有个渐变的动画效果,那么你可能会想到使用animation动画来实现,但这这种方式看起来不会自然,因为在调用statAnimation的时候因为图片已经显示了,这样再硬生生的播放一次动画其实会导致细微的闪烁效果。

使用TransitionDrawable可以完美解决这个问题。

1
2
3
4
5
6
7
final TransitionDrawable td = new TransitionDrawable(new Drawable[] { new ColorDrawable(0xfffcfcfc),

new BitmapDrawable(mContext.getResources(), bitmap) });

imageView.setImageDrawable(td);

td.startTransition(300);

其中300是渐变持续的时间,TransitionDrawable的第一个参数是渐变开始时的图像,第二个参数是最终要显示的图像。

也可以将TransitionDrawable用xml表示:

1
2
3
4
5
6
7
<transition xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/image_expand" />

<item android:drawable="@drawable/image_collapse" />

</transition>
1
2
3
4
5
6
7
8
9
Resources res = getResources();

TransitionDrawable transition = (TransitionDrawable)res.getDrawable(R.drawable.expand_collapse);

ImageView image = (ImageView) findViewById(R.id.toggle_image);

image.setImageDrawable(transition);

transition.startTransition(1000);

InsetDrawable对应,可以将其他drawable内嵌到自己当中。

ScaleDrawable可以根据level将指定的drawable缩放到一定比例。

ClipDrawable可以根据自己当前level裁剪另一个drawable。

其他:

AnimationDrawable可以播放帧动画,ColorDrawable代表单色

文章目录
,