已阅读5页,还剩83页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绘制2D图形 Android应用程序开发 Android提供了功能强大的图形库 用于移动设备应用程序开发Android提供两种图形库二维图形库三维图形库 1Android图形基础 二维图形库程序包 android graphics掌握图形库的图形类绘图创建一个类继承View类 或SurfaceView类 覆盖onDraw 方法 使用Canvas对象在界面上绘制不同图形 使用invalidate 方法刷新界面 1 1Color类 Android中的颜色用4个字节表示 ARGB 透明度 Alpha 红色 Red 绿色 Green 蓝色 Blue 一个字节8位可以表示256个数 即每种颜色有256个可选值颜色通常表示为一个32为整数 1 1Color类 透明度 衡量颜色透明度最小值为0 表示该像素完全透明最大值255 表示该像素完全不透明Alpha值为0 RGB的值将失效Alpha值在 0 255 表示该像素的颜色半透明 1 1Color类 创建color对象使用Color类的静态常量Intcolor Color BLUE solidblue使用颜色值color Color argb 127 255 0 255 Translucentpurpleintandroid graphics Color argb intalpha intred intgreen intblue Returnacolor intfromalpha red green bluecomponents Thesecomponentvaluesshouldbe 0 255 butthereisnorangecheckperformed soiftheyareoutofrange thereturnedcolorisundefined 1 1Color类 在XML文件中引用颜色资源android textColor color m android textColor android color background light 在Java文件中引用颜色资源Color getResources getColor R color m 在XML资源文件中定义颜色 Color类常用属性和方法 1 2Paint类 Paint是涂料的意思Android图形库的重要类之一 位于android graphics包中Paint类包含样式 颜色 及绘制图形所需的其他信息cPaint setColor Color LTGRAY 使用预定义浅灰色设置颜色 1 2Paint类 Paint类常用方法 1 3Canvas类 画布位于android graphics包中提供一些画各种图形的方法 如 如矩形 椭圆 园等 1 3Canvas类 Canvas类常用方法 1 3Canvas类 Activity类的对象控制屏幕Activity类的对象引用View类的对象View类的对象引用Canvas类的对象重写View onDraw 方法 可以在指定的画布上绘图onDraw 方法的参数将制定用于绘画的画布 1 4Path类 Path类包含一组矢量绘图命令Path一般用来从某点移动到另一个点连线Path类位于android graphics包中 1 4Path类 圆的绘制方向是顺时针circle newPath Circle addCircle 150 150 100 Direction CW PathEffect类 可以实现图形特效 1 5Drawable类 Drawable类主要针对位图等纯色的视图元素Drawable类支持的格式Bitmap 位图 PNG JPEG图像NinePatch 九宫格 一种可扩展的PNG图像 主要用作大小可调整的位图按钮的背景Shape 形状 基于Path类的矢量绘图命令 一种简化的可缩放矢量图形格式 1 5Drawable类 Layers 图层 绘图区的容器States 状态 一个容器 能根据可绘图区的状态显示其某个子可绘图区 主要用于选择不同的按钮并设置按钮的焦点状态Levels 级别 一个容器 能根据可绘图区的级别 显示其某个子可绘图区 用于电池或信号强度指示器Scale 缩放 包含一个子绘图区的容器 能根据可绘图区的当前级别调整其大小 一种用途是可缩放的图片查看器 1 5Drawable类 Drawable 可绘图区 通常在XML文件中定义下图定义一种渐变色 可以作为视图的背景XML文件中使用 android background 属性在onCreate 方法中使用 Canvas setBackgroundResource R drawable drawable name 1 5Drawable类 使用可绘图区资源作为GraphicsView视图的背景后的渐变效果运行如右图示设置渐变的可绘图区资源时 应该考虑横屏和竖屏时设置不同的可绘制区域 2在数独程序中添加图形 使用2D图形库提供的绘图类实现游戏中的图形绘制绘制游戏盘面绘制数字 2 1开始游戏 开始游戏 接收难度列表中选择的难度名称索引 实现开始游戏的代码游戏由Game活动实现 实现过程接收难度列表中选择的难度名称索引创建Intent对象启动Game活动 2 2定义Game类 从Intent对象中提取表示难度的数字 选择一局游戏 估算每个单元格的无效数字 创建PuzzleView实例 使得PuzzleView视图获取焦点 在AndroidManifest xml文件中注册Game活动 在res values strings xml中添加字符串资源 2 3定义PuzzleView类 定义此视图能够获得焦点 允许用户在视图中输入 引用Game类 在PuzzleView类中 需要实现onSizeChangede 方法在视图被创建 布局 时调用调用该方法前需要确定视图大小的值onSizeChanged intw inth intoldw intoldh w视图现在的宽度h视图现在的高度oldw视图以前的宽度oldh视图以前的高度 矩形 计算屏幕上每个单元格的大小 将矩形框设置在选择光标的位置 跟踪光标 此前的工作创建Game活动定义PuzzleView视图当开始一个新游戏 启动Game活动 将PuzzleView视图显示在Game活动中 2 4绘制游戏盘面 更新视图时 Android调用视图的onDraw 方法Android能够对画布进行剪裁 当视图的部分区域更新时重绘视图的部分 在res values colors xml文件中定义绘图所需的颜色资源 重写onDraw 方法绘制盘面 绘制数字 绘制提示 绘制选择 用指定的颜色绘制游戏盘面的背景 publicvoiddrawRect floatleft floattop floatright floatbottom Paintpaint Since APILevel1用指定的paint绘制指定的矩形ParametersleftTheleftsideoftherectangletobedrawntopThetopsideoftherectangletobedrawnrightTherightsideoftherectangletobedrawnbottomThebottomsideoftherectangletobedrawnpaintThepaintusedtodrawtherect 绘制网格线 设置了3种颜色的paint对象 深色 浅色 高亮色 绘制网格线 绘制单元格网格线 绘制网格线 绘制宫网格线 publicvoiddrawLine floatstartX floatstartY floatstopX floatstopY Paintpaint Since APILevel1使用指定的paint对象从起点 x y 到终点 x y 画一条线段 ParametersstartXThex coordinateofthestartpointofthelinestartYThey coordinateofthestartpointofthelinepaintThepaintusedtodrawtheline 注意绘制网格线的顺序很重要 后绘制的线会覆盖先绘制的线绘制的网格盘面如右图所示 2 5绘制数字 在单元格中绘制数字获取数字的位置获取数字的大小数字与单元格对齐 设置对齐方式 设置文本宽高比 在指定坐标返回字符串 给定字体的大小 数字的大小高度为单元格高度的四分之三宽高比与单元格宽高比相同采用相对大小 使得程序可以适应不同分辨率的屏幕数字的位置X Y方向居中floatx width 2 floaty height 2 fm ascent fm descent 2 publicvoiddrawText Stringtext floatx floaty Paintpaint Since APILevel1使用指定的paint对象从 x y 点开始绘制文本ParameterstextThetexttobedrawnxThex coordinateoftheoriginofthetextbeingdrawnyThey coordinateoftheoriginofthetextbeingdrawnpaintThepaintusedforthetext e g color size style 绘制文字 使文字中心与单元格中心重合字体高度是单元格高度的3 4字体的宽高比与单元格相同 3处理输入 Android支持多种硬件键盘 方向键 触摸屏 轨迹球等Android程序设计能够考虑硬件的多种形状 大小及输入方式支持任何可用的输入硬件 3 1定义和更新选定区域 实现一个光标 显示玩家当前选定的单元格在onDraw 方法这绘制选定区域 矩形选择框 重写onKeyDown 方法更改选定区域 当用户使用方向键 D pad 按下上 下 左 右按键时调用select 方法 移动光标也可以重写onTrackballEent 实现轨迹球输入当程序中没有处理轨迹球事件时 Android会自动将轨迹球事件转换为D pad事件 Select 方法 计算选定区域的新坐标 然后再次调用getRect 方法计算新的选择矩形 通知Android原选择矩形覆盖的区域需要重绘 通知Android新选择的区域需要重绘 Invalidate 方法将特定区域标记为已过期窗口管理器会对所有标记为已过期的区域一起调用onDraw 方法已过期的区域成为裁剪区域 系统在更新视图的时候只重绘这些发生变化的区域 优化了屏幕更新操作优化刷新 3 2输入数字 处理键盘输入 在onKeyDown 方法中添加处理各个按键的分支语句 清除单元格 打开软键盘 处理触摸屏输入 重写onTouchEvent 方法 并显示软键盘 显示软键盘 上述对键盘事件和触摸屏事件的处理中 均调用了setSelectedTile 方法 该方法用于修改单元格中的数字 将有效值填写在单元格里面 无参数 表示整个屏幕设置为已过期 3 3增加提示 根据单元格可填入的数字的个数绘制不同的背景 返回存储此处用过的数字的数组 获取矩形的位置 3 4抖动屏幕 当用户输入一个明显无效的数字 此时让屏幕抖动修改setSelectedTile 添加无效输入抖屏 在res anim shake xml文件中定义动画资源 以10像素为单位抖动屏幕 持续时间1000毫秒 动画插补器 用XML定义 动画插补器主要控制动画的运行次数 速度 加速度下面是上抖屏动画的动画插补器的XML定义 重复运行次数 4实现游戏功能 实现软键盘实现游戏逻辑本节内容与绘图没有关系 是游戏实现功能的控制环节 只做了解 4 1创建软键盘 支持触摸屏输入在游戏盘面的前端显示一个软键盘对话框返回玩家所选择的数字 在res layout keypad xml文件中创建用户布局 定义Keypad类实现软键盘对话框隐藏对于当前单元格无效的数字 启动软键盘对话框在软键盘中隐藏无效的数字 不显示视图 但仍然占据布局中的位置 为软键盘中的键设置监听器 关联键盘及键的视图ID 关联视图ID 循环处理软键盘的每个键 为每个键设置监听器 用按钮对应的数字作为参数t 软键盘上按键以外的地方 重写onKeyDown 支持玩家使用键盘输入数字 键盘输入有效时 调用该方法 检查给定数字的有效性 isValid 方法检查给定数字对当前单元格是否有效如果给定数字已在used数组中 则该数字无效Used数组存放某单元格所在行 列或宫中已使用的数字 returnResult 方法将玩家选定的数字返回给当前调用的活动puzzleView setSelectedTile tile 方法更改当前单元格的数字 关闭对话框 在Game类中调用keypad 4 2实现游戏逻辑 仅当输入的值对于当前单元格有效 才将单元格的值设置为新输入的值 提取给定位置单元格的数字列表 循环遍历数组 为游戏盘面中的每个单元格建立一个数组对于每个单元格 此数组维护一个当前已经填入到该单元格所在行 列和宫格的其他单元格中的数字列表若一个数字出现在列表中 则这个数字对当前单元格无效 提取给定位置单元格的数字列表 缓存数组used x y 通过calculatedUsedTiles 方法计算数组在每个单元格的位置调用calculatedUsedTiles x y 方法 计算此位置的行 列 宫已有的数字检查当前位置所在行的单元格 返回指定单元格中的数字 将单元格的数字添加到数组 检查列 检查宫格 压缩数组 返回只包含非0值的数组这一步处理 便于使用array le
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保密协议书视频拍摄
- 标签专业分包协议书
- rip协议书命令格式
- 2025年RCEP项下采购与原产地规则管理应用考核试卷
- 2025初级商业人像摄影师布光方案快速设计考核试卷
- 如果搬迁退还协议书
- 青海聚之源协议书
- 2025年公共事业行业数字政府与智慧城市研究报告及未来发展趋势预测
- 2025年家居装修行业智能家居与节能装修研究报告及未来发展趋势预测
- 2025年服装行业时尚产业数字化转型策略研究报告及未来发展趋势预测
- 2025年铁人三项比赛试题及答案
- 深圳网约车司机考试题目含答案
- 呼吸内科质控体系构建与实施
- 快开门压力容器事故应急预案和事故处理
- 设备代管协议合同书模板
- 酒店分餐服务培训
- 中医四诊在护理中的应用
- 钢厂设备安全培训课件
- XMTd-8000系列智能温度调节器说明书
- 十五五护理服务事业发展规划x
- 星海中学择校考试试题及答案
评论
0/150
提交评论