Android 中的绘图
最后修改于 2012 年 10 月 29 日
在本章 Android 开发教程中,我们将进行一些绘图。Android 框架 API 提供了 2D 绘图 API,允许渲染自定义图形。
我们可以直接在 `Canvas` 对象上绘图,或者修改现有的 View 来定制其外观和感觉。绘图在 `onDraw()` 方法中进行。简单的图形也可以在布局 XML 文件中创建。
我们使用 `Canvas` 对象进行绘图。`Canvas` 是一个具有绘图方法的对象,用于进行绘图。实际的绘图发生在放置在窗口中的 `Bitmap` 中。`Paint` 类保存了有关如何绘制几何图形、文本和位图的样式和颜色信息。`Drawable` 是一个可以被绘制的对象。与 `View` 不同,`Drawable` 没有接收事件或与用户交互的任何设施。
椭圆形
我们将要在 `View` 上绘制一个圆。该圆在 XML 文件中定义。无需修改清单文件。
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#666666"/> <size android:width="70dp" android:height="70dp"/> </shape>
在 `oval.xml` 文件中,我们创建一个圆形。我们定义它的颜色和大小。`oval.xml` 文件位于 `res/drawable` 目录下。该目录需要被创建。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <View android:layout_width="100dp" android:layout_height="100dp" android:layout_marginTop="5dp" android:background="@drawable/oval" /> </LinearLayout>
在 `main.xml` 文件中,我们定义了一个 `View`。这个 View 的背景会填充我们的可绘制对象。
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">OvalShape</string> </resources>
资源文件。
package com.zetcode.ovalshape; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
该文件只是加载了定义的布局。

绘制矩形
在第二个示例中,我们将在 `View` 上绘制一个矩形。它将在 `View` 的 `onDraw()` 方法中绘制。由于我们将在现有的 `View` 上绘图,我们将有一个预定义的 `Canvas` 及其 `Bitmap`。我们无需担心它们。清单文件未被修改。在此示例中,将不需要 `main.xml` 文件。
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">DrawRect</string> </resources>
资源。
package com.zetcode.drawrect; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class DrawView extends View { Paint paint = new Paint(); public DrawView(Context context) { super(context); paint.setColor(Color.GREEN); } @Override public void onDraw(Canvas canvas) { canvas.drawRect(30, 30, 100, 100, paint); } }
我们有一个自定义的 `DrawView` 类。该文件位于 `src/com/zetcode/drawrect/` 目录下。
public class DrawView extends View
自定义 `DrawView` 类继承自基础 `View` 类。
Paint paint = new Paint();
创建了一个 `Paint` 类的实例。它将定义绘图的颜色。
paint.setColor(Color.GREEN);
我们将以绿色绘制。
@Override public void onDraw(Canvas canvas) { canvas.drawRect(30, 30, 100, 100, paint); }
绘图在 `onDraw()` 方法中进行。该方法为我们提供了 `Canvas` 对象。我们调用 `drawRect()` 方法在 View 上绘制矩形。
package com.zetcode.drawrect; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DrawView drawView = new DrawView(this); drawView.setBackgroundColor(Color.WHITE); setContentView(drawView); } }
在 `MainActivity.java` 源文件中,我们将自定义的 `DrawView` 设置为 `Activity` 的内容 View。
DrawView drawView = new DrawView(this);
我们创建了一个 `DrawView` 类的实例。
drawView.setBackgroundColor(Color.WHITE);
我们为 `View` 指定了背景颜色。
setContentView(drawView);
`DrawView` 成为 `Activity` 的内容 `View`。

在本章 Android 开发教程中,我们进行了一些基础绘图。