📜  Android 中的 DrawableView(1)

📅  最后修改于: 2023-12-03 15:13:21.287000             🧑  作者: Mango

Android 中的 Drawable

在 Android 中,Drawable 是用来描述可画的所有可视化对象的基本类。在这个类中,可以找到一些重要的子类来描述不同的 Drawable 类型,包括 BitmapDrawable、ShapeDrawable、LayerDrawable 和 VectorDrawable 等。Drawable 对象可以用来绘制不同的形状、图像和文本,并且可以用于构建自定义视图类及其他 UI 元素。

使用 Drawable

在 Android 应用中使用 Drawable 可以有不同的方法。下面介绍三种主要的方法:

1. 在 XML 中使用

可以在 XML 布局文件或者 drawable 资源文件中使用 Drawable,例如:

<!-- 在 ImageView 中使用bitmap drawable -->
<ImageView
    android:id="@+id/image_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_bitmap" />
    
<!-- 在 Button 中使用 shape drawable -->
<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click me"
    android:background="@drawable/my_shape" />
2. 在 Java 代码中使用

可以在 Java 代码中创建并使用 Drawable,例如:

// 创建 BitmapDrawable
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
imageView.setImageDrawable(drawable);

// 创建 ShapeDrawable
ShapeDrawable drawable = new ShapeDrawable(new RectShape());
drawable.getPaint().setColor(Color.RED);
drawable.getPaint().setStyle(Paint.Style.FILL);
button.setBackground(drawable);
3. 在资源文件中使用

可以将 Drawable 储存在 res/drawable 目录下,以在应用中复用它们,例如:

res/drawable/my_bitmap.png
res/drawable/my_shape.xml
Drawable 类型
1. BitmapDrawable

BitmapDrawable 用于绘制 Bitmap 对象。它提供了一些方法来控制图像如何缩放和移动,例如 setGravity() 和 setTileMode()。例如,下面使用 BitmapDrawable 设置 ImageView 的图片:

Drawable drawable = new BitmapDrawable(getResources(), bitmap);
imageView.setImageDrawable(drawable);
2. ShapeDrawable

ShapeDrawable 可以用来绘制几何形状,包括矩形、圆角矩形、椭圆和圆形等。例如,下面使用 ShapeDrawable 设置 Button 的背景:

ShapeDrawable drawable = new ShapeDrawable(new RectShape());
drawable.getPaint().setColor(Color.RED);
drawable.getPaint().setStyle(Paint.Style.FILL);
button.setBackground(drawable);
3. LayerDrawable

LayerDrawable 可以用来绘制多个 Drawable 对象的层次结构,类似于 Photoshop 中的图层。例如,下面创建了一个包含两个矩形的 LayerDrawable:

ShapeDrawable rect1 = new ShapeDrawable(new RectShape());
rect1.getPaint().setColor(Color.RED);
rect1.getPaint().setStyle(Paint.Style.FILL);

ShapeDrawable rect2 = new ShapeDrawable(new RectShape());
rect2.getPaint().setColor(Color.BLUE);
rect2.getPaint().setStyle(Paint.Style.FILL);

Drawable[] layers = { rect1, rect2 };
LayerDrawable drawable = new LayerDrawable(layers);

imageView.setImageDrawable(drawable);
4. VectorDrawable

VectorDrawable 是一个可缩放矢量图形,可以无损放大或缩小,不会失真。它还可以在不同的设备和不同的分辨率下呈现良好的效果。例如,下面使用 VectorDrawable 设置 ImageView 的图片:

Drawable drawable = getResources().getDrawable(R.drawable.vector_icon);
imageView.setImageDrawable(drawable);
总结

Drawable 是 Android 中一个非常重要的类,并且提供了多种子类用于绘制不同类型的可视化对象。我们可以在 XML 布局文件、Java 代码和资源文件中使用 Drawable,以便快速创建自定义的 UI 元素。如果您需要更多关于 Drawable 的信息,请查阅官方文档。