Android开发与实践课件第11章图像与动画处理技术
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表11-2 Bitmap类的常用方法
方法
compress(Bi pressFor mat format, int quality, OutputStream stream)
createBitma p(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
//绘制矩形
运行本实例,将显示如图11-2所示的运行结果。
11.1.2 Canvas类
Canvas类代表画布,通过该类提供的方法,我们可以绘制各种图形(例如 ,矩形、圆形和线条等)。通常情况下,要在Android中绘图,需要先创建 一个继承自View类的视图,并且在该类中重写它的onDraw(Canvas canvas) 方法,然后在显示绘图的Activity中添加该视图。下面将通过一个具体的 实例来说明如何创建用于绘图的画布。 【例11-2】 在Eclipse中创建Android项目,实现创建绘图画布功能。(实 例位置:光盘\MR\源码\第11章\11-2) (1)创建一个名称为DrawView的类,该类继承自android.view.View类, 并添加构造方法和重写onDraw(Canvas canvas)方法,关键代码如下:
用于指定是否使用图像抖动处理,如果使用会使图像颜色更加平 滑和饱满,更加清晰
用于设置绘制路径时的路径效果,例如点画线
用 于 设 置 渐 变 , 可 以 使 用 LinearGradient ( 线 性 渐 变 ) 、 RadialGradient(径向渐变)或者SweepGradient(角度渐变)
应用该画笔,在画布上绘制一个带阴影的矩形的效果如图11-1所示。
图11-1 绘制带阴影的矩形
图11-2 绘制以渐变色填充的矩形
【例11-1】 分别定义一个线性渐变、径向渐变和角度渐变的画笔,并应用
这“3只画笔”绘制3个矩形。(实例位置:光盘\MR\源码\第11章\11-1)
关键代码如下:
Paint paint=new Paint();
//绘制矩形
//角度渐变
shader=new SweepGradient(265,110,new int[]{Color.RED,Color.GREEN,Color.BLUE},null);
paint.setShader(shader);
//
为画笔设置渐变器
canvas.drawRect(220, 70, 310, 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);
setShadowLayer(float float dx, float dy, int color)
radius,
setStrokeCap(Paint.Cap cap)
setStrokeJoin(Paint.Join join)
用于设置阴影,参数radius为阴影的角度,dx和dy为阴影在x轴和y 轴上的距离,color为阴影的颜色。如果参数radius的值为0,那么将没 有阴影
用于设置绘制文本时的文字对齐方式,参数值为Align.CENTER、 Align.LEFT或Align.RIGHT
setTextSize(float textSize)
用于设置绘制文本时的文字的大小
setFakeBoldText(boolean fakeBoldText)
setXfermode(Xfermode xfermode)
//
定义一个默认的画笔//线来自渐变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);
用于从源位图的指定坐标点开始,“挖取”指定宽度和高度的一块图像来创建 新的Bitmap对象,并按Matrix指定规则进行变换
Android开发与实践课件第11章图像 与动画处理技术
第11章 图像与动画处理技术
11.1 11.2 11.3 11.4 11.5
常用绘图类 绘制2D图像 为图像添加特效 Android中的动画 综合实例——忐忑的精灵
第11章 图像与动画处理技术
图形与动画处理技术在Android中非常重要,特别是在开发益智类游戏 或者2D游戏时,都离不开图形与动画处理技术的支持。本章将对Android中 的图形与动画处理技术进行详细介绍。
<com.mingrisoft.DrawView
android:id="@+id/drawView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
(3)在DrawView的onDraw()方法中,添加以下代码用于绘制一个带阴影的
setStrokeWidth(float width)
用于设置笔触的宽度
setStyle(Paint.Style style) setTextAlign(Paint.Align align)
用 于 设 置 填 充 风 格 , 参 数 值 为 Style.FILL 、 Style.FILL_AND_STROKE或Style.STROKE
createBitma p(int width, int height, Bitmap.Config config)
createBitma p(Bitmap source, int x, int y, int width, int height)
createBitma p(int[] colors, int width, int height, Bitmap.Config config)
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
11.1 常用绘图类
11.1.1 11.1.2 11.1.3 11.1.4
Paint类 Canvas类 Bitmap类 BitmapFactory类
11.1 常用绘图类
在Android中,绘制图像时,最常应用的就是Paint类、Canvas类、 Bitmap类和BitmapFactory类。其中Paint类代表画笔,Canvas类代表画布。 在现实生活中,有画笔和画布我们就可以正常作画了,在Android中,也是 如此,通过Paint类和Canvas类就可绘制图像了。下面将对这4个类进行详细 介绍。
createBitma p(Bitmap src)
描述 用于将Bitmap对象压缩为指定格式并保存到指定的文件输出流中,其中format参 数 值 可 以 是 pressFormat.PNG 、 pressFormat. JPEG 和 pressFormat.WEBP
描述
用于设置颜色,各参数值均为0~255之间的整数,分别用于表示 透明度、红色、绿色和蓝色值
用于设置颜色,参数color可以通过Color类提供的颜色常量指定, 也可以通过Color.rgb(int red,int green,int blue)方法指定
用于设置透明度,值为0~255之间的整数
用于指定是否使用抗锯齿功能,如果使用会使绘图速度变慢
用于当画笔的填充样式为STROKE或FILL_AND_STROKE时,设 置 笔 刷 的 图 形 样 式 , 参 数 值 可 以 是 Cap.BUTT 、 Cap.ROUND 或 Cap.SQUARE。主要体现在线的端点上
用 于 设 置 画 笔 转 弯 处 的 连 接 风 格 , 参 数 值 为 Join.BEVEL 、 Join.MITER或Join.ROUND
表11-1 Paint类的常用方法
方法 setARGB(int a, int r, int g, int b) setColor(int color) setAlpha(int a) setAntiAlias(boolean aa) setDither(boolean dither) setPathEffect(PathEffect effect) setShader(Shader shader)
11.1.1 Paint类
Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填 充效果等信息。使用Paint类时,需要先创建该类的对象,这可以通过该类提 供的构造方法来实现。通常情况下,只需要使用Paint()方法来创建一个使用 默认设置的Paint对象,具体代码如下: Paint paint=new Paint(); 创建Paint类的对象后,还可以通过该对象提供的方法来对画笔的默认设置进 行改变,例如,改变画笔的颜色、笔触宽度等。用于改变画笔设置的常用方 法如表11-1所示。
}
说明: 上面加粗的代码为重写onDraw()方法的代码。在重写的onDraw()方法中, 可以编写绘图代码,参数canvas就是我们要进行绘图的画布。 (2)修改新建项目的res/layout目录下的布局文件main.xml,将默认添加 的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,并 在帧布局管理器中添加步骤(1)创建的自定义视图。修改后的代码如下:
//绘制矩形
运行本实例,将显示如图11-3所示的运行结果。
图11-3 创建绘图画布并绘制带阴影的矩形
11.1.3 Bitmap类
Bitmap类代表位图,它是Android系统中图像处理的最重要类之一,使用它 不仅可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,而且还 可以指定格式保存图像文件。Bitmap类提供的常用方法如表11-2所示。
红色矩形。
Paint paint=new Paint();
//定义一个采用默认设置的画笔
paint.setColor(Color.RED);
//设置颜色为红色
paint.setShadowLayer(2, 3, 3, Color.rgb(180, 180, 180));
//设置阴影
canvas.drawRect(40, 40, 200, 100, paint);
public class DrawView extends View { /** * 功能:构造方法 */ public DrawView(Context context, AttributeSet attrs) { super(context, attrs); } /*
* 功能:重写onDraw()方法 */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); }
用于设置是否为粗体文字
用于设置图形重叠时的处理方式,例如合并、取交集或并集,经 常用来制作橡皮的擦除效果
例如,要定义一个画笔,指定该画笔的颜色为绿色,带一个浅灰色的阴影,
可以使用下面的代码。
Paint paint=new Paint(); paint.setColor(Color. RED); paint.setShadowLayer(2, 3, 3, Color.rgb(180, 180, 180));
方法
compress(Bi pressFor mat format, int quality, OutputStream stream)
createBitma p(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
//绘制矩形
运行本实例,将显示如图11-2所示的运行结果。
11.1.2 Canvas类
Canvas类代表画布,通过该类提供的方法,我们可以绘制各种图形(例如 ,矩形、圆形和线条等)。通常情况下,要在Android中绘图,需要先创建 一个继承自View类的视图,并且在该类中重写它的onDraw(Canvas canvas) 方法,然后在显示绘图的Activity中添加该视图。下面将通过一个具体的 实例来说明如何创建用于绘图的画布。 【例11-2】 在Eclipse中创建Android项目,实现创建绘图画布功能。(实 例位置:光盘\MR\源码\第11章\11-2) (1)创建一个名称为DrawView的类,该类继承自android.view.View类, 并添加构造方法和重写onDraw(Canvas canvas)方法,关键代码如下:
用于指定是否使用图像抖动处理,如果使用会使图像颜色更加平 滑和饱满,更加清晰
用于设置绘制路径时的路径效果,例如点画线
用 于 设 置 渐 变 , 可 以 使 用 LinearGradient ( 线 性 渐 变 ) 、 RadialGradient(径向渐变)或者SweepGradient(角度渐变)
应用该画笔,在画布上绘制一个带阴影的矩形的效果如图11-1所示。
图11-1 绘制带阴影的矩形
图11-2 绘制以渐变色填充的矩形
【例11-1】 分别定义一个线性渐变、径向渐变和角度渐变的画笔,并应用
这“3只画笔”绘制3个矩形。(实例位置:光盘\MR\源码\第11章\11-1)
关键代码如下:
Paint paint=new Paint();
//绘制矩形
//角度渐变
shader=new SweepGradient(265,110,new int[]{Color.RED,Color.GREEN,Color.BLUE},null);
paint.setShader(shader);
//
为画笔设置渐变器
canvas.drawRect(220, 70, 310, 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);
setShadowLayer(float float dx, float dy, int color)
radius,
setStrokeCap(Paint.Cap cap)
setStrokeJoin(Paint.Join join)
用于设置阴影,参数radius为阴影的角度,dx和dy为阴影在x轴和y 轴上的距离,color为阴影的颜色。如果参数radius的值为0,那么将没 有阴影
用于设置绘制文本时的文字对齐方式,参数值为Align.CENTER、 Align.LEFT或Align.RIGHT
setTextSize(float textSize)
用于设置绘制文本时的文字的大小
setFakeBoldText(boolean fakeBoldText)
setXfermode(Xfermode xfermode)
//
定义一个默认的画笔//线来自渐变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);
用于从源位图的指定坐标点开始,“挖取”指定宽度和高度的一块图像来创建 新的Bitmap对象,并按Matrix指定规则进行变换
Android开发与实践课件第11章图像 与动画处理技术
第11章 图像与动画处理技术
11.1 11.2 11.3 11.4 11.5
常用绘图类 绘制2D图像 为图像添加特效 Android中的动画 综合实例——忐忑的精灵
第11章 图像与动画处理技术
图形与动画处理技术在Android中非常重要,特别是在开发益智类游戏 或者2D游戏时,都离不开图形与动画处理技术的支持。本章将对Android中 的图形与动画处理技术进行详细介绍。
<com.mingrisoft.DrawView
android:id="@+id/drawView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
(3)在DrawView的onDraw()方法中,添加以下代码用于绘制一个带阴影的
setStrokeWidth(float width)
用于设置笔触的宽度
setStyle(Paint.Style style) setTextAlign(Paint.Align align)
用 于 设 置 填 充 风 格 , 参 数 值 为 Style.FILL 、 Style.FILL_AND_STROKE或Style.STROKE
createBitma p(int width, int height, Bitmap.Config config)
createBitma p(Bitmap source, int x, int y, int width, int height)
createBitma p(int[] colors, int width, int height, Bitmap.Config config)
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
11.1 常用绘图类
11.1.1 11.1.2 11.1.3 11.1.4
Paint类 Canvas类 Bitmap类 BitmapFactory类
11.1 常用绘图类
在Android中,绘制图像时,最常应用的就是Paint类、Canvas类、 Bitmap类和BitmapFactory类。其中Paint类代表画笔,Canvas类代表画布。 在现实生活中,有画笔和画布我们就可以正常作画了,在Android中,也是 如此,通过Paint类和Canvas类就可绘制图像了。下面将对这4个类进行详细 介绍。
createBitma p(Bitmap src)
描述 用于将Bitmap对象压缩为指定格式并保存到指定的文件输出流中,其中format参 数 值 可 以 是 pressFormat.PNG 、 pressFormat. JPEG 和 pressFormat.WEBP
描述
用于设置颜色,各参数值均为0~255之间的整数,分别用于表示 透明度、红色、绿色和蓝色值
用于设置颜色,参数color可以通过Color类提供的颜色常量指定, 也可以通过Color.rgb(int red,int green,int blue)方法指定
用于设置透明度,值为0~255之间的整数
用于指定是否使用抗锯齿功能,如果使用会使绘图速度变慢
用于当画笔的填充样式为STROKE或FILL_AND_STROKE时,设 置 笔 刷 的 图 形 样 式 , 参 数 值 可 以 是 Cap.BUTT 、 Cap.ROUND 或 Cap.SQUARE。主要体现在线的端点上
用 于 设 置 画 笔 转 弯 处 的 连 接 风 格 , 参 数 值 为 Join.BEVEL 、 Join.MITER或Join.ROUND
表11-1 Paint类的常用方法
方法 setARGB(int a, int r, int g, int b) setColor(int color) setAlpha(int a) setAntiAlias(boolean aa) setDither(boolean dither) setPathEffect(PathEffect effect) setShader(Shader shader)
11.1.1 Paint类
Paint类代表画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填 充效果等信息。使用Paint类时,需要先创建该类的对象,这可以通过该类提 供的构造方法来实现。通常情况下,只需要使用Paint()方法来创建一个使用 默认设置的Paint对象,具体代码如下: Paint paint=new Paint(); 创建Paint类的对象后,还可以通过该对象提供的方法来对画笔的默认设置进 行改变,例如,改变画笔的颜色、笔触宽度等。用于改变画笔设置的常用方 法如表11-1所示。
}
说明: 上面加粗的代码为重写onDraw()方法的代码。在重写的onDraw()方法中, 可以编写绘图代码,参数canvas就是我们要进行绘图的画布。 (2)修改新建项目的res/layout目录下的布局文件main.xml,将默认添加 的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,并 在帧布局管理器中添加步骤(1)创建的自定义视图。修改后的代码如下:
//绘制矩形
运行本实例,将显示如图11-3所示的运行结果。
图11-3 创建绘图画布并绘制带阴影的矩形
11.1.3 Bitmap类
Bitmap类代表位图,它是Android系统中图像处理的最重要类之一,使用它 不仅可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,而且还 可以指定格式保存图像文件。Bitmap类提供的常用方法如表11-2所示。
红色矩形。
Paint paint=new Paint();
//定义一个采用默认设置的画笔
paint.setColor(Color.RED);
//设置颜色为红色
paint.setShadowLayer(2, 3, 3, Color.rgb(180, 180, 180));
//设置阴影
canvas.drawRect(40, 40, 200, 100, paint);
public class DrawView extends View { /** * 功能:构造方法 */ public DrawView(Context context, AttributeSet attrs) { super(context, attrs); } /*
* 功能:重写onDraw()方法 */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); }
用于设置是否为粗体文字
用于设置图形重叠时的处理方式,例如合并、取交集或并集,经 常用来制作橡皮的擦除效果
例如,要定义一个画笔,指定该画笔的颜色为绿色,带一个浅灰色的阴影,
可以使用下面的代码。
Paint paint=new Paint(); paint.setColor(Color. RED); paint.setShadowLayer(2, 3, 3, Color.rgb(180, 180, 180));