第5章3绘制2D图形.ppt

上传人:sccc 文档编号:5932541 上传时间:2023-09-05 格式:PPT 页数:88 大小:1,006.04KB
返回 下载 相关 举报
第5章3绘制2D图形.ppt_第1页
第1页 / 共88页
第5章3绘制2D图形.ppt_第2页
第2页 / 共88页
第5章3绘制2D图形.ppt_第3页
第3页 / 共88页
第5章3绘制2D图形.ppt_第4页
第4页 / 共88页
第5章3绘制2D图形.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《第5章3绘制2D图形.ppt》由会员分享,可在线阅读,更多相关《第5章3绘制2D图形.ppt(88页珍藏版)》请在三一办公上搜索。

1、绘制2D图形,Android应用程序开发,Android提供了功能强大的图形库,用于移动设备应用程序开发Android提供两种图形库二维图形库三维图形库,1 Android图形基础,二维图形库程序包:android.graphics掌握图形库的图形类绘图创建一个类继承View类(或SurfaceView类)覆盖onDraw()方法,使用Canvas对象在界面上绘制不同图形,使用invalidate()方法刷新界面。,1.1 Color类,Android中的颜色用4个字节表示(ARGB)透明度(Alpha)红色(Red)绿色(Green)蓝色(Blue)一个字节8位可以表示256个数,即每种颜色

2、有256个可选值颜色通常表示为一个32为整数,1.1 Color类,透明度:衡量颜色透明度最小值为0,表示该像素完全透明最大值255,表示该像素完全不透明Alpha值为0,RGB的值将失效Alpha值在(0,255)表示该像素的颜色半透明,1.1 Color类,创建color对象使用Color类的静态常量Int color=Color.BLUE;/solid blue使用颜色值color=Color.argb(127,255,0,255);/Translucent purpleint android.graphics.Color.argb(int alpha,int red,int green

3、,int blue)Return a color-int from alpha,red,green,blue components.These component values should be 0.255,but there is no range check performed,so if they are out of range,the returned color is undefined.,1.1 Color类,在XML文件中引用颜色资源android:textColor=color/mandroid:textColor=android:color/background_ligh

4、t在Java文件中引用颜色资源Color=getResources().getColor(R.color.m);,在XML资源文件中定义颜色,Color类常用属性和方法,1.2 Paint类,Paint是涂料的意思Android图形库的重要类之一,位于android.graphics包中Paint类包含样式、颜色、及绘制图形所需的其他信息cPaint.setColor(Color.LTGRAY)使用预定义浅灰色设置颜色,1.2 Paint类,Paint类常用方法,1.3 Canvas类,画布位于android.graphics包中提供一些画各种图形的方法,如:如矩形、椭圆、园等,1.3 Can

5、vas类,Canvas类常用方法,1.3 Canvas类,Activity类的对象控制屏幕Activity类的对象引用View类的对象View类的对象引用Canvas类的对象重写View.onDraw()方法,可以在指定的画布上绘图onDraw()方法的参数将制定用于绘画的画布,1.4 Path类,Path类包含一组矢量绘图命令Path一般用来从某点移动到另一个点连线Path类位于android.graphics包中,1.4 Path类,圆的绘制方向是顺时针circle=new Path();Circle.addCircle(150,150,100,Direction.CW);PathEffe

6、ct类,可以实现图形特效;,1.5 Drawable类,Drawable类主要针对位图等纯色的视图元素Drawable类支持的格式Bitmap(位图)PNG/JPEG图像NinePatch(九宫格)一种可扩展的PNG图像,主要用作大小可调整的位图按钮的背景Shape(形状)基于Path类的矢量绘图命令,一种简化的可缩放矢量图形格式,1.5 Drawable类,Layers(图层)绘图区的容器States(状态)一个容器,能根据可绘图区的状态显示其某个子可绘图区。主要用于选择不同的按钮并设置按钮的焦点状态Levels(级别)一个容器,能根据可绘图区的级别,显示其某个子可绘图区。用于电池或信号强度

7、指示器Scale(缩放)包含一个子绘图区的容器,能根据可绘图区的当前级别调整其大小。一种用途是可缩放的图片查看器,1.5 Drawable类,Drawable(可绘图区)通常在XML文件中定义下图定义一种渐变色,可以作为视图的背景XML文件中使用:android:background=属性在onCreate()方法中使用:Canvas.setBackgroundResource(R.drawable.drawable_name),1.5 Drawable类,使用可绘图区资源作为GraphicsView视图的背景后的渐变效果运行如右图示设置渐变的可绘图区资源时,应该考虑横屏和竖屏时设置不同的可绘

8、制区域,2 在数独程序中添加图形,使用2D图形库提供的绘图类实现游戏中的图形绘制绘制游戏盘面绘制数字,2.1 开始游戏,开始游戏-接收难度列表中选择的难度名称索引,实现开始游戏的代码游戏由Game活动实现,实现过程接收难度列表中选择的难度名称索引创建Intent对象启动Game活动,2.2 定义Game类,从Intent对象中提取表示难度的数字,选择一局游戏,估算每个单元格的无效数字,创建PuzzleView实例,使得PuzzleView视图获取焦点,在AndroidManifest.xml文件中注册Game活动,在res/values/strings.xml中添加字符串资源,2.3 定义Pu

9、zzleView类,定义此视图能够获得焦点,允许用户在视图中输入,引用Game类,在PuzzleView类中,需要实现onSizeChangede()方法在视图被创建(布局)时调用调用该方法前需要确定视图大小的值onSizeChanged(int w,int h,int oldw,int oldh)w 视图现在的宽度h视图现在的高度oldw视图以前的宽度oldh视图以前的高度,矩形,计算屏幕上每个单元格的大小,将矩形框设置在选择光标的位置,跟踪光标,此前的工作创建Game活动定义PuzzleView视图当开始一个新游戏,启动Game活动,将PuzzleView视图显示在Game活动中,2.4

10、绘制游戏盘面,更新视图时,Android调用视图的onDraw()方法Android能够对画布进行剪裁,当视图的部分区域更新时重绘视图的部分,在res/values/colors.xml文件中定义绘图所需的颜色资源,重写onDraw()方法绘制盘面、绘制数字、绘制提示、绘制选择,用指定的颜色绘制游戏盘面的背景,public void drawRect(float left,float top,float right,float bottom,Paint paint)Since:API Level 1 用指定的 paint绘制指定的矩形Parametersleft The left side o

11、f the rectangle to be drawntop The top side of the rectangle to be drawnright The right side of the rectangle to be drawnbottom The bottom side of the rectangle to be drawnpaint The paint used to draw the rect,绘制网格线,设置了3种颜色的paint对象:深色、浅色、高亮色,绘制网格线,绘制单元格网格线,绘制网格线,绘制宫网格线,public void drawLine(float sta

12、rtX,float startY,float stopX,float stopY,Paint paint)Since:API Level 1 使用指定的paint对象从起点(x,y)到终点(x,y)画一条线段。ParametersstartX The x-coordinate of the start point of the linestartY The y-coordinate of the start point of the linepaint The paint used to draw the line,注意绘制网格线的顺序很重要,后绘制的线会覆盖先绘制的线绘制的网格盘面如右图所示

13、,2.5 绘制数字,在单元格中绘制数字获取数字的位置获取数字的大小数字与单元格对齐,设置对齐方式,设置文本宽高比,在指定坐标返回字符串,给定字体的大小,数字的大小高度为单元格高度的四分之三宽高比与单元格宽高比相同采用相对大小,使得程序可以适应不同分辨率的屏幕数字的位置X、Y方向居中float x=width/2;float y=height/2-(fm.ascent+fm.descent)/2;,public void drawText(String text,float x,float y,Paint paint)Since:API Level 1 使用指定的paint对象从(x,y)点开始

14、绘制文本Parameterstext The text to be drawnx The x-coordinate of the origin of the text being drawny The y-coordinate of the origin of the text being drawnpaint The paint used for the text(e.g.color,size,style),绘制文字,使文字中心与单元格中心重合字体高度是单元格高度的3/4字体的宽高比与单元格相同,3 处理输入,Android支持多种硬件键盘、方向键、触摸屏、轨迹球等Android程序设计能够

15、考虑硬件的多种形状、大小及输入方式支持任何可用的输入硬件,3.1 定义和更新选定区域,实现一个光标,显示玩家当前选定的单元格在onDraw()方法这绘制选定区域,矩形选择框,重写onKeyDown()方法更改选定区域,当用户使用方向键(D-pad)按下上、下、左、右按键时调用select()方法,移动光标也可以重写onTrackballEent()实现轨迹球输入当程序中没有处理轨迹球事件时,Android会自动将轨迹球事件转换为D-pad事件,Select()方法,计算选定区域的新坐标,然后再次调用getRect()方法计算新的选择矩形,通知Android原选择矩形覆盖的区域需要重绘,通知An

16、droid新选择的区域需要重绘,Invalidate()方法将特定区域标记为已过期窗口管理器会对所有标记为已过期的区域一起调用onDraw()方法已过期的区域成为裁剪区域,系统在更新视图的时候只重绘这些发生变化的区域,优化了屏幕更新操作优化刷新,3.2 输入数字,处理键盘输入,在onKeyDown()方法中添加处理各个按键的分支语句,清除单元格,打开软键盘,处理触摸屏输入,重写onTouchEvent()方法,并显示软键盘,显示软键盘,上述对键盘事件和触摸屏事件的处理中,均调用了setSelectedTile()方法,该方法用于修改单元格中的数字;,将有效值填写在单元格里面,无参数,表示整个屏

17、幕设置为已过期,3.3 增加提示,根据单元格可填入的数字的个数绘制不同的背景,返回存储此处用过的数字的数组,获取矩形的位置,3.4 抖动屏幕,当用户输入一个明显无效的数字,此时让屏幕抖动修改setSelectedTile(),添加无效输入抖屏,在res/anim/shake.xml文件中定义动画资源,以10像素为单位抖动屏幕,持续时间1000毫秒,动画插补器,用XML定义,动画插补器主要控制动画的运行次数、速度、加速度下面是上抖屏动画的动画插补器的XML定义,重复运行次数,4 实现游戏功能,实现软键盘实现游戏逻辑本节内容与绘图没有关系,是游戏实现功能的控制环节,只做了解,4.1 创建软键盘,支

18、持触摸屏输入在游戏盘面的前端显示一个软键盘对话框返回玩家所选择的数字,在res/layout/keypad.xml文件中创建用户布局,定义Keypad类实现软键盘对话框隐藏对于当前单元格无效的数字,启动软键盘对话框在软键盘中隐藏无效的数字,不显示视图,但仍然占据布局中的位置,为软键盘中的键设置监听器,关联键盘及键的视图ID,关联视图ID,循环处理软键盘的每个键,为每个键设置监听器,用按钮对应的数字作为参数t,软键盘上按键以外的地方,重写onKeyDown(),支持玩家使用键盘输入数字,键盘输入有效时,调用该方法,检查给定数字的有效性,isValid()方法检查给定数字对当前单元格是否有效如果给

19、定数字已在used数组中,则该数字无效Used数组存放某单元格所在行、列或宫中已使用的数字,returnResult()方法将玩家选定的数字返回给当前调用的活动puzzleView.setSelectedTile(tile)方法更改当前单元格的数字,关闭对话框,在Game类中调用keypad(),4.2 实现游戏逻辑,仅当输入的值对于当前单元格有效,才将单元格的值设置为新输入的值,提取给定位置单元格的数字列表,循环遍历数组,为游戏盘面中的每个单元格建立一个数组对于每个单元格,此数组维护一个当前已经填入到该单元格所在行、列和宫格的其他单元格中的数字列表若一个数字出现在列表中,则这个数字对当前单元

20、格无效,提取给定位置单元格的数字列表,缓存数组usedxy,通过calculatedUsedTiles()方法计算数组在每个单元格的位置调用calculatedUsedTiles(x,y)方法,计算此位置的行、列、宫已有的数字检查当前位置所在行的单元格,返回指定单元格中的数字,将单元格的数字添加到数组,检查列,检查宫格,压缩数组,返回只包含非0值的数组这一步处理,便于使用array.length返回当前单元格所在的行、列、宫格已经使用的数字个数,4.3 其他功能,在游戏中使用3个硬编码的数独游戏分别表示easyPuzzle、mediumPuzzle、hardPuzzle,接收难度基本并返回一次

21、游戏,将字符串转换为表示游戏的数组,将用数组表示的游戏转换为字符串,将字符串转换为表示游戏的数组,getTile()方法接收单元格的x和y坐标,返回该单元格当前的数,如果数字为0,表示单元格空白,显示单元格时会用到getTileString()方法,该方法返回的字符串表示给定单元格中的数字,如果单元格为空,则返回一个空字符串,4.5 改进程序,要实现最优的设备性能,需要精心设计更复杂的程序onDraw()方法对程序的性能影响较大,应该尽可能降低影响,提高onDraw()方法的执行效率避免在onDraw()方法中执行任何对象分配操作在onDraw()方法以外的地方预取颜色常量等属性值预先创建自定义Paint类对象,在onDraw()方法中只使用已定义的Paint类对象对于多次使用的值(如getWidth()方法返回的宽度值),在方法开始处将其提取出来,然后使用本地副本访问,本章只是简单介绍了2D图形的绘制可以通过进一步的学习,设计更加丰富的界面阅读android.graphics包的在线文档掌握更多的绘图方法,4.6 本章小结,Android图形基础掌握2D图形绘制的基本类在程序中绘制2D图形绘制网格、字符等各种几何图形处理自定义视图上的输入控制、刷新,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号