第94页
第2篇 高级篇
本篇包括图形图像处理技术、多媒体应用开发、Content Provider实现数据共享、线程与消息处理、Service应用、网络编程及Internet应用,并结合大量的图示、范例、经典应用和录像等使读者快速掌握Android开发中的高级内容,学习完本篇,读者可以掌握更深一层的Android开发技术。
第9章 图形图像处理技术
( 教学录像:2小时56分钟)
图形图像处理技术在Android中非常重要,特别是在开发益智类游戏或者2D游戏时,都离不开图形图像处理技术的支持。本章将对Android中的图形图像处理技术进行详细介绍。
通过阅读本章,您可以:
★ 了解常用的绘图类
★ 掌握如何绘制几何图形
★ 掌握如何绘制文本
★ 掌握如何绘制路径及绕路径文本
★ 掌握如何绘制图片
★ 掌握如何为图形添加旋转、缩放、倾斜和平移特效
★ 掌握如何使用BitmapShader渲染图像
★ 掌握如何实现逐帧动画
★ 掌握如何实现补间动画
9.1 常用绘图类
教学录像:光盘\TM\lx\9\常用绘图类.exe
在Android中,绘制图像时最常应用的就是Paint类、Canvas类、Bitmap类和BitmapFactory类。其中,Paint类代表画笔,Canvas类代表画布。在现实生活中,有画笔和画布就可以作画了,在Android中也是如此,通过Paint类和Canvas类即可绘制图像。下面将对这4个类进行详细介绍。
9.1.1 Paint类
Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。使用Paint类时,首先需要创建该类的对象,这可以通过该类提供的构造方法来实现。通常情况下,只需要使用无参数的构造方法来创建一个使用默认设置的Paint对象,具体代码如下:
Paint paint=new Paint();
创建Paint类的对象后,还可以通过该对象提供的方法来对画笔的默认设置进行改变,例如,改变画笔的颜色、笔触宽度等。用于改变画笔设置的常用方法如表9.1所示。
表9.1 Paint类的常用方法
方 法 描 述
setARGB(int a, int r, int g, int b) 用于设置颜色,各参数值均为0~255之间的整数,分别用于表示透明度、红色、绿色和蓝色值
setColor(int color) 用于设置颜色,参数color可以通过Color类提供的颜色常量指定,也可以通过Color.rgb(int red,int green,int blue)方法指定
setAlpha(int a) 用于设置透明度,值为0~255之间的整数
setAntiAlias(boolean aa) 用于指定是否使用抗锯齿功能,如果使用,会使绘图速度变慢
setDither(boolean dither) 用于指定是否使用图像抖动处理,如果使用,会使图像颜色更加平滑和饱满,使图像更加清晰
setPathEffect(PathEffect effect) 用于设置绘制路径时的路径效果,如点划线
setShader(Shader shader) 用于设置渐变,可以使用LinearGradient(线性渐变)、RadialGradient(径向渐变)或者SweepGradient(角度渐变)
setShadowLayer(float radius, float dx, float dy, int color) 用于设置阴影,参数radius为阴影的角度;dx和dy为阴影在x轴和y轴上的距离;color为阴影的颜色。如果参数radius的值为0,那么将没有阴影
setStrokeCap(Paint.Cap cap) 用于当画笔的填充样式为STROKE或FILL_AND_STROKE时,设置笔刷的图形样式,参数值可以是Cap.BUTT、Cap.ROUND或Cap.SQUARE。主要体现在线的端点上
setStrokeJoin(Paint.Join join) 用于设置画笔转弯处的连接风格,参数值为Join.BEVEL、Join.MITER或Join.ROUND
setStrokeWidth(float width) 用于设置笔触的宽度
setStyle(Paint.Style style) 用于设置填充风格,参数值为Style.FILL、Style.FILL_AND_STROKE或Style.STROKE
setTextAlign(Paint.Align align) 用于设置绘制文本时的文字对齐方式,参数值为Align.CENTER、Align.LEFT或Align.RIGHT
setTextSize(float textSize) 用于设置绘制文本时的文字的大小
setFakeBoldText(boolean fakeBoldText) 用于设置是否为粗体文字
setXfermode(Xfermode xfermode) 用于设置图形重叠时的处理方式,如合并、取交集或并集,经常用来制作橡皮的擦除效果
例如,要定义一个画笔,指定该画笔的颜色为红色,并带一个浅灰色的阴影,可以使用下面的代码:
Paint paint=new Paint();
paint.setColor(Color. RED);
paint.setShadowLayer(2, 3, 3, Color.rgb(180, 180, 180));
应用该画笔,在画布上绘制一个带阴影的矩形的效果如图9.1所示。
图9.1 绘制带阴影的矩形
说明: 关于如何在画布上绘制矩形,将在9.1.2节进行介绍。
例9.1 在Ecbpse中创建Android项目,名称为9.1,分别定义一个线性渐变、径向渐变和角度渐变的画笔,并应用这3个画笔绘制3个矩形。(实例位置:光盘\TM\sl\9\9.1)
关键代码如下:
Paint paint=new Paint(); //定义一个默认的画笔
//线性渐变
Shader shader=new LinearGradient(0, 0, 50, 50, Color.RED, Color.GREEN, Shader.TileMode.MIRROR);
paint.setShader(shader); //为画笔设置渐变器
canvas.drawRect(10, 70, 100, 150, paint); //绘制矩形
//径向渐变
shader=new RadialGradient(160, 110, 50, Color.RED, Color.GREEN, Shader.TileMode.MIRROR);
paint.setShader(shader); //为画笔设置渐变器
canvas.drawRect(115,70,205,150, paint); //绘制矩形
//角度渐变
shader=new SweepGradient(265,110,new int[]{Color.RED,Color.GREEN,Color.BLUE},null);