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 开发教程中,我们进行了一些基础绘图。