速读原著-Android应用开发入门教程(2D图形接口的程序结构)

2020-02-13 15:12:54 浏览数 (1)

第 9 章 2D图形接口的使用

在 GUI 系统中,图形 API 是比较底层的接口。Android 系统的图形 API 包括 2D 和 3D 两部分:2D 部分使用 android.graphics 类,也作为上层控件的构建基础;3D 部分使用 OpenGL 作为标准接口。

9.1 使用 2D图形接口的程序结构。

2D 图形的接口实际上是 Android 图形系统的基础, GUI 上的各种可见元素也是基于 2D 图形接口构建的。因此,Android GUI 方面的内容分为两层,下层是图形的 API,上层是各种控件,各种控件实际上是基于图形API 绘制出来的。

使用 2D 图形接口的结构如下图所示:

通过继承 android.view.View 类,并实现其中的 onDraw()函数来实现绘制的工作,绘制的工作主要由android.graphics 包来实现。android.graphics 包中的内容是 Android 系统的 2D 图形 API,其中主要类的内容包含以下一些内容:

  • Point、Rect 和 Color 等:一些基础类,分别定义顶点、矩阵、颜色的基础信息元素;
  • Bitmap:表示内存中的位图,可以从图像文件中建立,可以指定依靠颜色来建立,也可以控制其中的每一个像素;
  • Paint:画笔,用于控制绘制的样式(style)和颜色(color)等信息;
  • Canvas:画布,2D 图形系统最核心的一个类,处理 onDraw()调用 主要绘制的设置和操作在 Paint(画笔)和 Canvas(画布)2 个类当中,使用这两个类就可以完成所有的绘制。

Canvas 类包含了一系列用于绘制的方法,方法分为 3 种类型:

  • 几何图形
  • 文本
  • 位图

Canvas 类的几何图形(Geometry)方面的方法用于绘制点、绘制线、绘制矩形、绘制圆弧等。其中一些主要的方法如下所示:

代码语言:javascript复制
void drawARGB(int a, int r, int g, int b) // 将整体填充为某种颜色
void drawPoints(float[] pts, Paint paint) // 绘制一个点
void drawLines(float[] pts, Paint paint) // 绘制一条线
void drawRect(RectF rect, Paint paint) // 绘制矩形
void drawCircle(float cx, float cy, float radius, Paint paint) // 绘制圆形
void drawArc(RectF oval, float startAngle, float sweepAngle, // 绘制圆弧
 boolean useCenter, Paint paint)

Canvas 类的文本(Text)方面的方法用于直接绘制文本内容,文本通常用一个字符串来表示。其中一些主要的方法如下所示:

代码语言:javascript复制
void drawText(String text, int start, int end, float x, float y, Paint paint) 
void drawText(char[] text, int index, int count, float x, float y, Paint paint) 
void drawText(String text, float x, float y, Paint paint) 
void drawText(CharSequence text, int start, int end, float x, float y, Paint paint)

Canvas 类的位图(Bitmap)方面的方法用于直接绘制位图,位图通常用一个 Bitmap 类来表示。其中一些主要的方法如下所示:

代码语言:javascript复制
void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) // 指定 Matrix 绘制位图
void drawBitmap(int[] colors, int offset, int stride, // 指定数组作为 Bitmap 绘制
 float x, float y, int width, int height, 
 boolean hasAlpha, Paint paint) 
void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)// 自动缩放到目标矩形的绘制

Canvas 是 Android 的 2D 图形绘制的中枢,绘制方法的参数中通常包含一个 Paint 类型,它作为附加绘制的信息来使用。 在使用 2D 的图形 API 方面,步骤通常如下所示: 1、扩展实现 android.view.View 类。 2、实现 View 的 OnDraw()函数,在其中使用 Canvas 的方法进行绘制。

使用 2D 的图形 API 的场合,自定义实现的 View 类型作为下层的绘制和上层的 GUI 系统中间层。android.graphics.drawable 包是 Android 中一个绘制相关的包,表示一些可以被绘制的东西。在 Android 中 Drawable 的含义就是可以仅仅是为了显示来使用的,与 View 的主要区别就在于 Drawable 不能从用户处获得事件的反馈。

事实上,使用 Android 的 2D API 的程序结构和实现一个自定义控件类似,但是它们的目的略有不同:使用2D API 主要是为了实现自由的绘制;自定义控件的目的是在应用程序中使用这些控件,包括可以在布局文件中使用甚至使用其属性。

0 人点赞