![软件开发工具:第7章 图形图像处理_第1页](http://file4.renrendoc.com/view/2ef919b35932c31f15144ae92e2574f8/2ef919b35932c31f15144ae92e2574f81.gif)
![软件开发工具:第7章 图形图像处理_第2页](http://file4.renrendoc.com/view/2ef919b35932c31f15144ae92e2574f8/2ef919b35932c31f15144ae92e2574f82.gif)
![软件开发工具:第7章 图形图像处理_第3页](http://file4.renrendoc.com/view/2ef919b35932c31f15144ae92e2574f8/2ef919b35932c31f15144ae92e2574f83.gif)
![软件开发工具:第7章 图形图像处理_第4页](http://file4.renrendoc.com/view/2ef919b35932c31f15144ae92e2574f8/2ef919b35932c31f15144ae92e2574f84.gif)
![软件开发工具:第7章 图形图像处理_第5页](http://file4.renrendoc.com/view/2ef919b35932c31f15144ae92e2574f8/2ef919b35932c31f15144ae92e2574f85.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、郑州大学信息工程学院第7章 图形图像处理点击添加文本郑州大学信息工程学院7.1 基本绘图7.2 2D绘图7.3 图形特效处理7.4 综合练习7.5 本章小结本章导读本章导读:(不讲,其他课程已经涉及了)本章将介绍如何在Android手机屏幕上绘制图形图像。本章主要知识点有:(1)Android基本绘图知识。(2)实现几何图形、文本、路径和图片在手机屏幕上的绘制。(3)如何对图片进行特效处理,包括平移、旋转、缩放、倾斜 、扭曲和位图着色器等。7.1 基本绘图7.1.1 准备画布(Canvas)一般我们要画一张画的话,我们需要准备好画笔和画布。Android实现绘图的原理正如我们现实中去作画一样,
2、需要要有画笔和画布。Android中如何创建一个画布?在Android中,画布叫做Canvas,是android.graphics下的一个类。通过这个Canvas类,我们可以在画布上绘制各种图形,例如矩形、圆形和线条等。要在Android中绘图,一般的流程都是先创建一个继承View类的视图,然后重写onDraw()方法,然后再在Activity中添加视图。7.1 基本绘图下面我们通过举例来看具体的实现过程:【例7.1】利用画布绘制一个矩形。(详见教学资源光盘code文件夹下第7章Canvas工程)(1)创建工程,取名Canvas,默认包名com.mialab.graphics.canvas。在
3、包内,新建类DrawView.java,扩展android.view.View。重写DrawView的onDraw()方法。一般来说,我们都需要重写这个默认类,来实现自定义的功能。本例中我们要在画布上绘制一个边长为20,红色背景且带有黑色阴影的正方形7.1 基本绘图相关代码如下:Overrideprotected void onDraw(Canvas canvas)super.onDraw(canvas);Paint paint=new Paint(); paint.setColor(Color.RED);paint.setShadowLayer(2, 3, 3,Color.BLACK);ca
4、nvas.drawRect(20,20,120,120, paint); /实现矩形绘图通过以上代码,我们就将画布加入到了实际的绘图操作中去。具体onDraw()方法内如何实现绘制图形,我们将会在7.1.2和7.1.3中详细介绍。7.1 基本绘图修改布局文件activity_main.xml。在手机界面放置一个帧布局,并将我们自定义的DrawView控件加入到帧布局中。运行程序,将得到如图7-1所示的运行结果: 图7-1 Canvas画布绘图7.1 基本绘图7.1.2 准备画笔(Paint)有了画布后我们需要一支画笔来绘图,在Android中,画笔叫做Paint,是android.graphi
5、cs下的一个类。通过Paint,我们能够实现对需要绘制的图像设置颜色和风格,例如线的宽度、颜色、透明度等等。Paint默认创建方法:Paint paint=new Paint();创建完成后,就可以对实例化后的画笔paint设置或者读取相关的属性了,表7-1所示的是Paint常用的一些设置方法。7.1 基本绘图方法说明setColor(int Color)设置颜色,参数Color即颜色的值可以用多种方法指定。(具体请参考android.graphics.Color类)setAlpha(int a)设置透明度,参数a为0255之间的整数。void setARGB(int a, int r, in
6、t g, int b) 设置颜色,利用ARGB格式设置。setAntiAlias(boolean aa)设置是否抗锯齿。setPathEffect(PathEffect effect)设置绘制路径时的路径效果。setShader(Shader shader)设置画笔的填充效果。setShadowLayer(float radius, float dx, float dy, int color)设置阴影。setStrokeWidth(float width)设置画笔的笔触宽度。setStrokeJoin(Paint.Join join) 设置画笔转弯处的连接风格。setStyle(Paint.S
7、tyle style) 设置画笔的填充风格。setTextAlign(Paint.Align align)设置绘制文本时的文字对齐方式。setTextSize(float textSize) 设置绘制文本时的文字大小。 表7-1 Paint 常用方法说明7.1 基本绘图7.1.2 位图处理(BitMap和BitmapFactory)1使用Bitmap在Android中,Bitmap是一个位图对象类,用于存放位图数据。当我们需要对已有的图片资源进行操作的时候,我们通常是不会对原始图片文件(drawable资源或文件系统中的图片文件)直接操作,而且是将文件加载到Bitmap对象,然后我们对再对Bi
8、tmap实例对象进行相关操作。如果我们需要以Drawable的方式去访问Bitmap的资源,可以通过实例化BitmapDrawable方法来实现:BitmapDrawable drawable = new BitmapDrawable(bitmap);如果我们需要将drawable中的资源载入到一个bitmap中去,我们可以这样做:Bitmap bitmap = drawable.getBitmap();当然,Bitmap类还提供了很多方法,用于创建和回收Bitmap对象。如表7-2所示。7.1 基本绘图方法说明createBitmap(Bitmap source, int x, int y,
9、 int width, in height)从源位图source的指定坐标点(给定x,y)开始,从中“挖取”宽width、高height的一块出来。创建新的Bitmap对象。createScaledBitmap(Bitmap src,int src, int dstWidth, int dstHeight, Boolean filter) 对源位图src进行缩放,缩放成宽dstWidth,高dstHeight的新位图。createBitmap(int width, int height, Config config) 创建指定格式、大小的位图。createBitmap(Bitmap sourc
10、e, int x, int y, int width, int height) 以source为原图,创建新的图片,指定起始坐标以及新图像的高宽。createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) 从源位图source的指定坐标点(给定x,y)开始,从中“挖取”宽width、高height的一块出来,创建新的Bitmap 对象。并按Matrix指定的规则进行变换。Boolean isRecycled()返回该Bitmap对象是否已被回收。void recycle()
11、强制一个Bitmap对象立即回收自己。 表7-2 Paint 常用方法说明7.1 基本绘图方法说明decodeByteArray(byte data,int offset,int length) 从指定字节数组的offset位置开始,将长度为length的字节数据解析成Bitmap对象。decodeFile(String pathName) 从pathName指定的文件中解析、创建Bitmap对象。decodeFileDescriptor(FileDescriptor fd)用于从FileDescriptor对应的文件中解析、创建Bitmap对象。decodeResource(Resource
12、s res, int id)用于根据给定的资源ID从指定资源中解析、创建Bitmap对象。decodeStream(InputStream is): 用于从指定输入流中解析、创建Bitmap对象。decodeByteArray(byte data,int offset,int length)从指定字节数组的offset位置开始,将长度为length的字节数据解析成Bitmap对象。decodeFile(String pathName): 从pathName指定的文件中解析、创建Bitmap对象。 表7-3 Paint 常用方法说明2BitmapFactoryBitmapFactory是配合Bi
13、tmap使用的一个工具类,提供了解析各种来源文件并创建为Bitmap对象的功能。BitmapFactory的常用方法,如表7-3所示。7.2 2D绘图上一小节中我们已经简单介绍了实现绘图的基本方法,本小节我们将具体介绍Android提供的一些常用绘制方法,包括绘制几何图形、文本、路径和图片。7.2.1 几何图形几乎所有的程序语言或应用开发框架都支持几何图形的绘制,Android也不例外。Canvas提供的几何图形绘制方法,如表7-4所示。7.2 2D绘图方法说明drawArc(RectF oval, float startAngle, float sweepAngle, boolean use
14、Center, Paint paint)绘制弧,可以是闭合的圆弧,也可以是一条弧线drawCircle(float cx, float cy, float radius, Paint paint)绘制一个圆形drawLine(float startX, float startY, float stopX, float stopY, Paint paint)绘制一条线段drawLines(float pts, Paint paint)或drawLines(float pts, int offset, int count, Paint paint)绘制多条线段drawOval(RectF oval
15、, Paint paint)绘制椭圆drawPoint(float x, float y, Paint paint)绘制一个点drawPoints(float pts, Paint paint)或drawPoints(float pts, int offset, int count, Paint paint)绘制多个点drawRect(float left, float top, float right, float bottom, Paint paint)绘制矩形drawRoundRect(RectF rect, float rx, float ry, Paint paint)绘制带圆角的矩
16、形 表7-4 Canvas提供的几何图形绘制方法7.2 2D绘图下面我们以一个例子,来解释一下这些常用的几何图形的绘制。【例7.2】使用Canvas提供的绘图方法绘制几何图形。(详见教学资源光盘code文件夹下第7章CanvasDraw工程)(1)新建项目,取名CanvasDraw,包名org.mialab.graphics.canvasdraw。(2)新建DrawView。请参考例7.1。(3)修改activity_main.xml。请参考例7.1。(4)修改onDarw()方法。为了绘制相关的图形,我们需要分2步:第一步设置好画笔,第二步进行相关绘图。关键代码如下:Paint paint=
17、new Paint(); /设置画笔paint.setAntiAlias(true); /抗锯齿paint.setColor(Color.RED); /画笔颜色为红paint.setShadowLayer(2, 3, 3,Color.BLACK); /设置阴影paint.setStrokeWidth(2); /设置线宽为2/画一个弧线。设置坐标,左-上-右-下格式。RectF rectfArc=new RectF(left,top,right,bottom);7.2 2D绘图/坐标、起始角度、旋转角度、是否闭合扇形,画笔canvas.drawArc(rectfArc, -90,60,true,
18、 paint); canvas.drawCircle(right+50, top+20, 20, paint); /设置圆心cx和cy坐标、半径、画笔/绘制单根线条,设置起点和终点的x,y坐标,以及画笔canvas.drawLine(right+90, top+20, right+150, top+20, paint); canvas.drawLines(new floatright+170, top+20, right+200, top+20,right+170, top+5, right+170, top+20, paint); /设置一组线段的坐标和画笔RectF rectfOval=n
19、ew RectF(left,top+80,right,bottom+60); /绘制椭圆canvas.drawOval(rectfOval, paint);/绘制7.2 2D绘图canvas.drawPoint(left+80, top+90, paint);/绘制一个点,点的x,y坐标,以及画笔canvas.drawPoints(new floatleft+80, top+100, left+83, top+100,left+86,top+100, left+89, top+100, paint);RectF rectfRect=new RectF(left+120,top+80,right
20、+120,bottom+60); /绘制矩形/设置坐标,左-上-右-下格式canvas.drawRect(rectfRect, paint);RectF rectfRoundRect=new RectF(left+200,top+80,right+200,bottom+60); /圆角矩形canvas.drawRoundRect(rectfRoundRect, 5, 5, paint);/坐标,圆角的2个半径,以及画笔7.2 2D绘图运行结果如图7-2所示。图7-2 几何绘图7.2 2D绘图7.2.2 文本在Android中,我们可以通过TextView控件或者直接使用图片文字来实现文本的显示
21、,除此之外,我们还可以通过Android的Canvas类提供的绘制文本方法实现相同的功能。当开发中我们遇到大量文本,特别是文本本身是个变量的时候,例如游戏中的对白,使用TextView或者图片就变得非常困难且效率低下,而通过Canvas绘制文本方法就可以灵活快速的显示出文本。Canvas一共提供两种文本绘制方法,具体方法如表7-5所示:方法说明drawText(String text, float x, float y, Paint paint)给定坐标,绘制整个文本drawText (String text, int start, int end, float x, float y, Pai
22、nt paint)给定坐标,绘制给定文本的第start个字符到第end个字符。drawPosText(String text,float pos , Paint paint)给定每个字符坐标,分别绘制文本。这个方法不被推荐使用。 表7-5 Canvas提供的文本绘制方法7.2 2D绘图【例7.3】利用3种Canvas文本绘制方法,在屏幕上显示相关文本。(详见教学资源光盘code文件夹下第7章TextDraw工程),运行结果如图7-3所示。 图7-3 文本绘图 7.2 2D绘图7.2.3 路径当我们利用前面几小节介绍的绘图方法进行了开发后,可能会有一些困惑,仅仅通过那些方法有时候不能够很好的绘制
23、出一些特殊图形,比如画一个不规则的多边形等等。这个时候,我们可以考虑使用android.graphics提供的另外一组绘制方法,路径Path。我们可以将Path类理解为另外一种画笔,这支画笔只是用来设计图形,本身既不会直接绘制图形,并且设计图形的颜色、线宽等参数也不由其提供。真实的绘图由Canvas执行,颜色、线宽等参数还是由Paint来设置。下面我们来介绍一些常用的Path方法,如表7-6所示。7.2 2D绘图方法说明addArc(RectF oval, float startAngle, float sweepAngle)添加一条弧线路径addCircle(float cx, float
24、cy, float radius,Path.Direction dir)添加一个圆形路径,要设置绘制方向是顺时针还是逆时针addOval(RectF oval, Path.Direction dir)添加一个椭圆路径,要设置绘制方向是顺时针还是逆时针addRect(RectF rect, Path.Direction dir)添加一个矩形路径要设置绘制方向是顺时针还是逆时针addRoundRect(RectF rect, float rx, float ry, Path.Direction dir)添加一个圆角矩形路径,要设置绘制方向是顺时针还是逆时针addRoundRect(RectF re
25、ct, float rx, float ry, Path.Direction dir)添加一个圆角矩形路径,要设置绘制方向是顺时针还是逆时针addPath(Path src)或addPath (Path src, float dx, float dy)复制一个Path路径到本路径close()闭合路径moveTo(float x,float y)设置线段的起点lineTo(float x,float y)添加一条线段,以moveTo()参数为起点,lineTo()参数为重点;若moveTo()未设置,则以(0,0)为起点quadTo(float x1,float y1, float x2,fl
26、oat y2)添加一条线段路径 表7-6 Path常用方法7.2 2D绘图【例7.4】利用路径绘制一副墨镜。(详见教学资源光盘code文件夹下第7章PathDraw工程),运行结果如图7-4所示。 图7-4 路径绘图7.2 2D绘图7.2.1 图片在Android中,Canvas除了能够实现上述小节讲解的直接绘图外,还能够利用已有的Bitmap资源,进行绘图,常用的方法如表7-7所示:方法说明drawBitmap(int colors, int offset, int stride, float x, float y, int width, int height, boolean hasAlp
27、ha,Paintpaint)把一组颜色处理为一个Bitmap位图,然后绘制出来。drawBitmap(Bitmapbitmap,Matrixmatrix,Paintpaint)通过矩阵来绘制Bitmap位图drawBitmap(Bitmapbitmap,Rectsrc,RectFdst,Paintpaint)从指定点绘制从Bitmap中挖取的矩形drawBitmap(Bitmapbitmap, float left, float top,Paintpaint)在指定点位置完整的BitmapcreateBitmap (Bitmap src)通过已经存在的位图创建新位图createBitmap (
28、int colors, int width, int height, Bitmap.Config config)通过色彩数组创建色彩渐变位图createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)通过从原图位置挖去一块,然后根据Matrix和filter创建新位图 表7-7 Canvas图片绘图常用方法7.2 2D绘图【例7.5】利用相关方法,在指定位置绘制指定位图。(详见教学资源光盘code文件夹下第7章PictureDraw工程),运行结果如图7-5所示。 7-5
29、图片绘制 7.3 图形特效处理前面所讲的图片处理,都是直接绘制所需的图形,即绘制的图形和我们设置的参数一模一样。那如果,我们需要对已有的图像做些特殊处理后再绘制到屏幕上,是否可行呢,答案是肯定的,Android提供了一系列方法,实现对图形的特效处理。7.3.1 平移、旋转、缩放、倾斜 我们首先来介绍一下对图片进行平移、旋转、缩放和倾斜这4个特效的实现。要实现这几个功能,我们不得不先介绍一下android.graphic.Matrix类,这是一个特殊的类,它可以实现图片或者组件的变换。Matrix实现原理是通过对坐标的数学转换来实现,这种转换是基于一个33的矩阵来实现的,这个矩阵如图7-6所示。
30、具体运算的原理我们不在这里赘述,有兴趣的读者请参考的相关阅读材料。 7.3 图形特效处理图7-6 Matrix矩阵Matrix提供了4类转换,分别是平移(Translate)、旋转(Rotate)、缩放(Scale)和倾斜(Skew)。每种转换都有3种运算方法分别是清空并执行(set)、后乘(post)、前乘(pre),这3种方法对应的4类转换的参数是一样的,只是执行效果不同:set方法将清空之前的矩阵信息然后执行当前的变换,并且在3个方法中永远是在中间执行,post方法意味着变换将被最后执行,pre方法将最先被执行。 注意:所有在各类set方法前写的pre方法或者post方法都会失效,因为s
31、et方法具有清空功能!7.3 图形特效处理下面,我们按照平移(Translate)、旋转(Rotate)、缩放(Scale)和倾斜(Skew)的顺序来介绍具体的实现方法。由于三种运算方法语法格式相同,我们都以set方法为例进行介绍。1平移平移是最简单的一个变换,表7-8是平移的3种方法和解释以及举例。方法说明setTranslate(float dx, float dy)将图像移动到(dx,dy)坐标位置上例如将某图片移动到(100,100):Matrix matrix=new Matrix();matrix.setTranslate(100,100);postTranslate(float
32、dx, float dy)preTranslate(float dx, float dy)表7-8 Matrix平移方法 7.3 图形特效处理2旋转旋转有2种参数设置方法,一种是只指定旋转度数,另一种是设置轴心和旋转度数。表7-9是旋转的6种方法和解释以及举例。方法说明setRotate(float degrees)将图像以(0,0)为轴心,旋转degrees例如将某图片以(0,0)为轴心旋转45:Matrix matrix=new Matrix();matrix.setRotate(45);postRotate (float degrees)preRotate (float degrees)
33、setRotate(float degrees,float px,float py)将图像以(px,py)为轴心,旋转degrees例如将某图片以(10,10)为轴心旋转45:Matrix matrix=new Matrix();matrix.setRotate(45,10,10);postRotate (float degrees,float px,float py)preRotate (float degrees,float px,float py)表7-9 Matrix旋转方法 7.3 图形特效处理3缩放缩放有2种参数设置方法,一种是只指定缩放比例,另一种是设置轴心和缩放比例。表7-10
34、是缩放的6种方法和解释以及举例。方法说明setScale(float sx, float sy)将图像以(0,0)为轴心,水平方向缩放比例为sx,垂直方向缩放比例为sy,进行缩放。例如将某图片以(0,0)为轴心,X,Y方向都缩放为原来的20%:Matrix matrix=new Matrix();matrix.setScale(0.2f,20);/两种比例的表达方式postScale(float sx, float sy)preScale(float sx, float sy)setScale(float sx, float syx,float py)将图像以(px,py)为轴心,旋转degr
35、ees例如将某图片以(10,10)为轴心,X,Y方向都缩放为原来的20%:Matrix matrix=new Matrix();matrix.setScale(0.2f,20,10,10);postScale(float sx, float sy,float px,float py)preScale(float sx, float sy,float px,float py)表7-10 Matrix缩放方法 7.3 图形特效处理4倾斜倾斜有2种参数设置方法,一种是只指定倾斜度,另一种是设置轴心和倾斜度。表7-11是缩放的6种方法和解释以及举例。方法说明setSkew(float kx, floa
36、t ky)将图像以(0,0)为轴心,水平方向缩放比例为sx,垂直方向缩放比例为sy,进行缩放。例如将某图片以(0,0)为轴心,X方向倾斜30,Y方向不倾斜:Matrix matrix=new Matrix();matrix.setSkew(0.3f,0);/两种比例的表达方式postSkew(float kx, float ky)preSkew(float kx, float ky)setSkew(float kx, float ky),float px,float py)将图像以(px,py)为轴心,旋转degrees例如将某图片以(10,10)为轴心,X,Y方向都缩放为原来的20%:Mat
37、rix matrix=new Matrix();matrix.setScale(0.2f,20,10,10);postSkew(float kx, float ky),float px,float py)preSkew(float kx, float ky),float px,float py)表7-11 Matrix倾斜方法 7.3 图形特效处理【例7.6】利用Matrix类实现图片的平移、旋转、缩放和倾斜特效。(详见教学资源光盘code文件夹下第7章TRSSDraw工程),运行结果如图7-7所示。图7-7 平移、旋转、缩放和倾斜示例 7.3 图形特效处理7.3.2 扭曲上一小节,我们通过M
38、atrix实现了图片的变换,这一小节我们再介绍一个方法,来实现图片的扭曲。Canvas提供了drawBitmapMesh()方法,通过它能够有效的实现图片扭曲。drawBitmapMesh (Bitmap bitmap, int meshWidth, int meshHeight, float verts, int vertOffset, int colors, int colorOffset, Paint paint)这个方法的参数较多,我们简单介绍一下参数的意义。如表7-12所示。表7-12 扭曲方法参数说明bitmap需要扭曲的位图。meshWidth横向分割网格数。meshHeight
39、纵向分割网格数。verts扭曲后,各网格顶点的位置。需要有(meshWidth+1) * (meshHeight+1) * 2 + vertOffset个值对应。vertOffset设置verts数组中,开始产生扭曲影响的偏移量,就是从第几个点开始扭曲。colors对网格顶点进行着色,可以为null,如设置需要有(meshWidth+1) * (meshHeight+1) * 2 + colorOffset个值对应。colorOffset开始产生顶点着色影响的偏移量 7.3 图形特效处理【例7.7】绘制一张网格图,然后通过触摸的方法,使得图片根据触摸的位置进行扭曲。(详见教学资源光盘code文
40、件夹下第7章MeshDraw工程),扭曲示例运行结果如图7-8所示,左侧为使用Color参数,右侧为原图不使用Color着色。 图7-8 扭曲示例 7.3 图形特效处理7.3.3 位图着色器在Android种,提供了一个叫做BitmapShader的类,该类提供了对2D位图的X方向和Y方向单独着色渲染.这个类只有一种设置方法:BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)tileX和tileY代表这两个变量分别指定的是X方向和Y方向。Shader.TileMode是着色方法,一共有三种,分别是使
41、用边界颜色填充(CLAMP)、镜像(MIRROR)和重复(REPEAT)。实例化后的位图着色器只是一个参数,须将该对象利用Paint的setShader()方法设置给需要的画笔。 7.3 图形特效处理【例7.8】利用位图着色器,实现相关绘图渲染。(详见教学资源光盘code文件夹下第7章BitmapShaderDraw工程),运行结果如图7-9所示。图7-9 BitmapShader位图着色器示例 7.4 综合练习7.4.1 任务说明利用Android的绘图功能,制作一个斗地主的游戏场景,可以点击按钮模拟出牌。整个场景由游戏区域和功能区域两部分构成。(1)游戏区域: 人物头像和名字。斗地主有3个
42、玩家,所以有3个头像和名字。分别将这3个 头像和文字布置在游戏区域。 我的手牌。游戏时,作为玩家本人,需要将自己的手牌全部显示在屏幕上。 出牌区域。出牌区域由2部分构成:出的牌和出牌的说明。(2)功能区域:功能区有一个按钮构成,按钮靠右对齐。 7.4 综合练习7.4.2 代码实现(详见教学资源光盘code文件夹下第7章CardGameDraw工程)(1)新建项目,取名CardGameDraw,包名org.mialab.graphics.cardgamedraw。(2)在res文件夹下新建drawable-nodpi文件夹。将图片资源cards_all.png和head_1、head_2和hea
43、d_3拷贝到该文件夹下。(3)添加文本资源。修改resvalue下的string.xml文件,添加以下内容:出牌(4)新建类DrawView,继承自android.view.View。(5)修改AndroidManifest.xml。在activity标签中添加如下2行代码,让屏幕横屏:android:configChanges=orientation|keyboardHiddenandroid:screenOrientation=landscape(6)修改activity_main.xml。在手机界面上放置一个相对布局,设置里面的控件(包括自定义的DrawView和一个按钮)是垂直方向排列
44、。 7.4 综合练习(7)修改类DrawView的构造函数DrawView()。主要代码如下:/读取资源文件并加载到位图中cards_res = BitmapFactory.decodeResource(getResources(), R.drawable.cards_all);heads0=BitmapFactory.decodeResource(getResources(), R.drawable.head_1);heads1=BitmapFactory.decodeResource(getResources(), R.drawable.head_2);heads2=BitmapFacto
45、ry.decodeResource(getResources(), R.drawable.head_3);matrix = new Matrix();matrix.setRotate(float) 90); /牌本身是横放的,通过Matrix将其旋转90matrix.postScale(0.6f, 0.6f); /缩小牌的大小为原来的60%for(x=0;x=3;x+)for(y=0;y=12;y+) /将图片资源的每一张牌面单独抠出,放入位图数组中cardsxy = Bitmap.createBitmap(cards_res,card_width *x+6*x,card_height*y-(
46、int)(0.5*y), card_width, card_height, matrix, true); /抠图并放入数组中/大、小鬼的牌单独抠出,因为无法遍历cards40=Bitmap.createBitmap(cards_res,0,card_height*13-6, card_width, card_height, matrix, true);cards41=Bitmap.createBitmap(cards_res,card_width+6,card_height*13-6, card_width, card_height, matrix, true); 7.4 综合练习(8)修改类DrawView的绘图函数onView()。主要代码如下:Paint paint=new Paint(); /新建画笔paint.setAntiAlias(true);paint.setColor(Color.WHITE);canvas.drawColor(Color.rgb(0,136,238); /绘制背景canvas.drawBitmap(heads0, 30, 20, null); /绘制头像和人名canvas.draw
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度教育局校园环境整治与美化工程承包合同
- 2025年度国际智能电网技术引进合同模板
- 2025年度精油产品供应链金融与风险管理合同
- 2025年度借贷合同纠纷起诉书撰写与证据收集指南
- 2025年度旧车出口贸易合同范本
- 2025年度建筑安装工程劳务分包合同模板
- 2025年度建筑安装工程合同履约保证保险合同范本
- 2025年度建筑工程材料供应商产品质量保险合同
- 2025年度城市轨道交通工程材料采购合同范本
- 2025年度剧院员工培训及招聘服务合同
- GB/T 10205-2009磷酸一铵、磷酸二铵
- 公司财务制度及流程
- 高支模专项施工方案(专家论证)
- 深圳版初中英语单词汇总
- 健康养生,快乐生活课件
- 《物流与供应链管理-新商业、新链接、新物流》配套教学课件
- 物联网项目实施进度计划表
- MDD指令附录一 基本要求检查表2013版
- 骆驼祥子1一24章批注
- 新部编人教版四年级下册道德与法治全册教案(教学设计)
- 2021年胃肠外科规培出科考试试题及答案
评论
0/150
提交评论