返回

深入剖析Android Drawable,揭秘图形绘制的艺术

Android

Android的Drawable详解

前言

本篇文章是《Android开发艺术探索》第6章的读后感和实践Demo,是关于Android的Drawable的相关知识。

在之前写Bitmap的文章时,有个很有意思的问题,就是在Android中,我们一般用Bitmap来做图片处理,但是在Drawable中,我们却可以用Bitmap来创建Drawable对象。这不禁让我对Drawable产生了浓厚的兴趣,于是就有了这篇文章。

Drawable是什么?

Drawable是Android图形绘制的基础,它定义了如何将图形绘制到Canvas上。Drawable可以是Bitmap、Shape、LayerDrawable、LevelListDrawable、GradientDrawable、StateListDrawable、AnimatedStateListDrawable等。

Drawable的种类

Drawable的种类非常多,主要包括:

  • BitmapDrawable :使用Bitmap创建的Drawable对象。
  • ShapeDrawable :使用Shape创建的Drawable对象。
  • LayerDrawable :将多个Drawable对象组合成一个Drawable对象。
  • LevelListDrawable :根据不同的level值显示不同的Drawable对象。
  • GradientDrawable :使用渐变色创建的Drawable对象。
  • StateListDrawable :根据不同的state值显示不同的Drawable对象。
  • AnimatedStateListDrawable :根据不同的state值显示不同的动画Drawable对象。

Drawable的属性

Drawable的属性有很多,主要包括:

  • bounds :Drawable的边界。
  • intrinsicWidth :Drawable的固有宽度。
  • intrinsicHeight :Drawable的固有高度。
  • opacity :Drawable的透明度。
  • colorFilter :Drawable的颜色过滤器。
  • padding :Drawable的内边距。
  • mirrored :Drawable是否镜像。
  • tileMode :Drawable的平铺模式。
  • alpha :Drawable的透明度。
  • state :Drawable的状态。

Drawable的绘制过程

Drawable的绘制过程如下:

  1. 调用Drawable的draw()方法。
  2. Drawable调用Canvas的save()方法保存当前Canvas的状态。
  3. Drawable将自身绘制到Canvas上。
  4. Drawable调用Canvas的restore()方法恢复Canvas的状态。

Drawable的实例

以下是一些使用Drawable创建图形的实例:

<!-- 使用Bitmap创建Drawable -->
<ImageView
    android:src="@drawable/my_image" />

<!-- 使用Shape创建Drawable -->
<ShapeDrawable
    android:shape="rectangle"
    android:color="#ff0000" />

<!-- 使用LayerDrawable创建Drawable -->
<LayerDrawable
    android:drawable="@drawable/my_image"
    android:drawable="@drawable/my_text" />

<!-- 使用LevelListDrawable创建Drawable -->
<LevelListDrawable>
    <item
        android:drawable="@drawable/my_image_1"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/my_image_2"
        android:minLevel="1" />
</LevelListDrawable>

<!-- 使用GradientDrawable创建Drawable -->
<GradientDrawable
    android:shape="rectangle"
    android:startColor="#ff0000"
    android:endColor="#00ff00" />

<!-- 使用StateListDrawable创建Drawable -->
<StateListDrawable>
    <item
        android:drawable="@drawable/my_image_1"
        android:state_pressed="true" />
    <item
        android:drawable="@drawable/my_image_2" />
</StateListDrawable>

<!-- 使用AnimatedStateListDrawable创建Drawable -->
<AnimatedStateListDrawable>
    <item
        android:drawable="@drawable/my_image_1"
        android:state_pressed="true" />
    <item
        android:drawable="@drawable/my_image_2" />
    <transition
        android:fromId="@drawable/my_image_1"
        android:toId="@drawable/my_image_2" />
</AnimatedStateListDrawable>

结语

Drawable是Android图形绘制的基础,它提供了丰富的功能和种类,可以帮助开发者创建各种各样的图形。希望本文对广大Android开发者有所帮助。