版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android游戏开发大全注:因内容过长上传受限制,本文档只显示部分内容,完整版文档请下载此文档后留言谢谢。目录\h第一篇Android游戏开发核心技术\h第1章Android平台简介\h1.1Android的来龙去脉\h1.2掀起Android的盖头来\h1.2.1选择Android的理由\h1.2.2Android的应用程序框架\h1.3Android开发环境的搭建\h1.3.1SDK的下载及安装\h1.3.2Eclipse集成开发环境的搭建\h1.3.3虚拟设备的创建与模拟器的运行\h1.3.4第一个Android程序\h1.3.5Android程序的监控与调试\h1.4小结\h第2章Android游戏开发之前台渲染\h2.1创建Android用户界面\h2.1.1布局管理\h2.1.2常用控件及其事件处理\h2.2图形与动画在Android中的实现\h2.2.1简单图形的绘制\h2.2.2贴图的艺术\h2.2.3自定义动画的播放\h2.3Android平台下的多媒体开发\h2.3.1音频的播放\h2.3.2视频的播放\h2.3.3Camera图像采集\h2.4小结\h第3章Android游戏开发之交互式通信\h3.1Android应用程序的基本组件\h3.1.1Activity组件\h3.1.2Service组件\h3.1.3BroadcastReceiver组件\h3.1.4ContentProvider组件\h3.1.5AndroidManifest.xml文件简介\h3.2应用程序的内部通信\h3.2.1消息的处理者——Handler类简介\h3.2.2使用Handler进行内部通信\h3.3应用程序组件之间的通信\h3.3.1Intent类简介\h3.3.2应用程序组件——IntentFilter类简介\h3.3.3示例1:与Android系统组件通信\h3.3.4示例2:应用程序组件间通信示例Activity部分的开发\h3.3.5示例3:应用程序组件间通信示例Service部分的开发\h3.4小结\h第4章Android游戏开发之数据存储和传感器\h4.1在Android平台上实现数据存储\h4.1.1私有文件夹文件的写入与读取\h4.1.2读取Resources和Assets中的文件\h4.1.3轻量级数据库SQLite简介\h4.1.4SQLite的使用示例\h4.1.5数据共享者——ContentProvider的使用\h4.1.6简单的数据存储——Preferences的使用\h4.2Android平台下传感器应用的开发\h4.2.1传感器应用开发流程\h4.2.2常用传感器简介\h4.2.3传感器应用开发示例\h4.2.4使用SensorSimulator模拟传感器变化\h4.2.5使用新版本的API开发传感器应用\h4.3小结\h第5章Android游戏开发之网络编程\h5.1基于Socket套接字的网络编程\h5.2基于HTTP协议的网络编程\h5.2.1通过URL获取网络资源\h5.2.2在Android中解析XML\h5.3Android平台下的GoogleMap\h5.3.1定位类GenPoint与显示地图类MapView的搭配使用\h5.3.2位置监听器——LocationListener的使用\h5.4其他网络通信方式\h5.4.1使用WiFi进行开发\h5.4.2借助于蓝牙(Bluetooth)技术进行开发\h5.5小结\h第6章不一样的游戏,一样的精彩\h6.1射击类游戏\h6.1.1游戏玩法\h6.1.2视觉效果\h6.1.3游戏内容设计\h6.2竞速类游戏\h6.2.1游戏玩法\h6.2.2视觉效果\h6.2.3游戏内容设计\h6.3益智类游戏\h6.3.1游戏玩法\h6.3.2视觉效果\h6.3.3游戏内容设计\h6.4角色扮演游戏\h6.4.1游戏玩法\h6.4.2视觉效果\h6.4.3游戏内容设计\h6.5闯关动作类游戏\h6.5.1游戏玩法\h6.5.2视觉效果\h6.5.3游戏内容设计\h6.6冒险游戏\h6.6.1游戏玩法\h6.6.2视觉效果\h6.6.3游戏内容设计\h6.7策略游戏\h6.7.1游戏玩法\h6.7.2视觉效果\h6.7.3游戏内容设计\h6.8养成类游戏\h6.8.1游戏玩法\h6.8.2视觉效果\h6.8.3游戏内容设计\h6.9经营类游戏\h6.9.1游戏玩法\h6.9.2视觉效果\h6.9.3游戏内容设计\h6.10体育类游戏\h6.10.1游戏玩法\h6.10.2视觉效果\h6.10.3游戏内容设计\h6.11小结\h第7章游戏背后的数学与物理\h7.1编程中经常用到的数理知识\h7.1.1数学方面\h7.1.2物理方面\h7.2物理小球在游戏中的应用\h7.2.1开发运动体Movable类的代码\h7.2.2开发物理引擎BallThread类的代码\h7.2.3视图类——开发BallView类的代码\h7.2.4绘制线程——开发DrawThread类的代码\h7.2.5开发Activity部分的代码\h7.3粒子系统\h7.3.1粒子对象类——开发粒子对象Particle类和粒子集合ParticleSet类\h7.3.2开发焰火粒子系统的物理引擎ParticleThread类的代码\h7.3.3视图类——开发视图类ParticleView及其相关类\h7.3.4开发程序Activity部分的代码\h7.3.5将焰火粒子系统改为瀑布粒子系统\h7.4碰撞检测技术\h7.4.1碰撞检测技术基础\h7.4.2游戏中实体对象之间的碰撞检测\h7.4.3游戏实体对象与环境之间的碰撞检测\h7.5小结\h第8章游戏中的人工智能\h8.1让怪物聪明起来——Android中的路径搜索\h8.1.1路径搜索示例基本框架的搭建\h8.1.2路径搜索示例的控制面板实现\h8.1.3路径搜索示例GameView的实现\h8.1.4深度优先路径搜索DFS\h8.1.5广度优先路径搜索BFS\h8.1.6路径搜索算法——Dijkstra\h8.1.7用A*算法优化搜索\h8.2有限状态机\h8.2.1何为有限状态机\h8.2.2有限状态机的简单实现\h8.2.3有限状态机的OO实现\h8.3小结\h第9章游戏开发小秘技\h9.1地图编辑器与关卡设计\h9.1.1关卡地图的重要性\h9.1.2图片分割界面的实现\h9.1.3地图设计界面的实现\h9.2游戏中的模糊逻辑\h9.2.1模糊的才是真实的\h9.2.2如何在Android中将游戏模糊化\h9.3游戏的基本优化技巧\h9.3.1代码上的小艺术\h9.3.2Android中的查找表技术\h9.3.3游戏的感觉和性能问题\h9.4小结\h第10章游戏的心脏——物理引擎\h10.1物理引擎很重要\h10.1.1什么是物理引擎\h10.1.2常见的物理引擎\h10.22D的王者JBox2D\h10.2.1基本的物理学概念\h10.2.2JBox2D中常用类的介绍\h10.3球体撞击木块金字塔案例\h10.3.1案例运行效果\h10.3.2案例的基本框架结构\h10.3.3常量类——Constant\h10.3.4抽象类——MyBody\h10.3.5圆形刚体类——MyCircleColor\h10.3.6生成刚体形状的工具类——Box2DUtil\h10.3.7颜色工具类——ColorUtil\h10.3.8主控制类——MyBox2dActivity\h10.3.9显示界面类——GameView\h10.3.10绘制线程类——DrawThread\h10.4简易打砖块案例\h10.4.1一般碰撞版\h10.4.2碰撞后消失版\h10.5旋转关节跷跷板案例\h10.5.1旋转关节介绍\h10.5.2多边形刚体类MyPolygonColor的开发\h10.5.3生成刚体形状的工具类——Box2DUtil\h10.5.4将场景中的刚体摆放到位\h10.5.5增加旋转关节\h10.6旋转关节链条摆案例\h10.6.1案例运行效果\h10.6.2案例的机械结构\h10.6.3主控制类——MyBox2dActivity\h10.7组合机械结构案例\h10.7.1案例的运行效果\h10.7.2整体场景的机械结构\h10.7.3案例的基本框架结构\h10.7.4圆形刚体类——MyCircleColor\h10.7.5生成刚体形状的工具类——Box2DUtil\h10.7.6主控制类——MyBox2dActivity\h10.7.7游戏界面类——GameView\h10.7.8绘制线程类——DrawThread\h10.8小结\h第11章OpenGLES应用开发基础\h11.1OpenGLES概述及3D基本图形绘制\h11.1.1OpenGL及OpenGLES简介\h11.1.23D基本知识\h11.1.3使用索引的不同绘制方式\h11.1.4用索引法绘制三角形的案例\h11.1.5不使用索引数据绘制\h11.2正交投影和透视投影\h11.2.1正交投影\h11.2.2透视投影\h11.2.3两种投影方式的原理及视口\h11.2.4两种投影方式的案例\h11.3光照与材质\h11.3.1光照的3种组成元素\h11.3.2定向光与定位光\h11.3.3法向量\h11.3.4材质\h11.3.5两种光源的案例\h11.4纹理及纹理映射\h11.4.1纹理映射基本原理\h11.4.2使用纹理映射的案例\h11.4.3几种纹理拉伸方式\h11.4.4几种纹理过滤方式\h11.5摄像机和雾特效\h11.5.1摄像机的设置\h11.5.2设置合理的视角\h11.5.3雾特效的开发\h11.6典型几何体的开发\h11.6.1圆柱\h11.6.2圆锥\h11.6.3球\h11.6.4椭圆体\h11.6.5胶囊体\h11.6.6几何体大集合\h11.7小结\h第二篇Android游戏开发实战综合案例\h第12章滚屏动作游戏——太空保卫战\h12.1游戏的背景及功能概述\h12.1.1背景概述\h12.1.2功能简介\h12.2游戏的策划及准备工作\h12.2.1游戏的策划\h12.2.2Android平台下游戏的准备工作\h12.3游戏的架构\h12.3.1各个类的简要介绍\h12.3.2游戏的框架简介\h12.4辅助界面相关类的实现\h12.4.1主控制类——PlaneActivity的实现\h12.4.2欢迎界面WelcomeView类\h12.4.3其他辅助界面的介绍\h12.5游戏界面的框架设计\h12.6游戏实体相关类的实现\h12.6.1飞机Plane类的实现\h12.6.2敌方飞机EnemyPlane类的实现\h12.6.3子弹Bullet类的实现\h12.6.4其他相关类的实现\h12.7游戏界面的完善\h12.7.1地图类Maps的实现\h12.7.2背景滚动类GameViewBackGroundThread的实现\h12.7.3物体移动线程MoveThread的实现\h12.7.4键盘监听线程KeyThread的实现\h12.7.5图片初始化方法initBitmap的实现\h12.7.6绘制方法onDraw的实现\h12.8游戏的优化与改进\h第13章棋牌游戏——中国象棋人机对弈\h13.1游戏的背景及功能概述\h13.1.1背景概述\h13.1.2功能介绍\h13.2游戏的策划及准备工作\h13.2.1游戏的策划\h13.2.2Android平台下游戏的准备工作\h13.3游戏的架构\h13.3.1各个类简要介绍\h13.3.2游戏框架简介\h13.4主控制类——Chess_DJB_Activity\h13.5辅助界面相关类\h13.6游戏界面相关类\h13.6.1游戏界面绘制类GameView\h13.6.2游戏界面常量类ViewConstant\h13.7走法引擎相关类\h13.7.1常量类Constant\h13.7.2工具类Chess_LoadUtil\h13.7.3走法引擎主类LoadUtil\h13.7.4走法的排序规则类MyComparator\h13.7.5记录走棋步骤类StackplayChess\h13.8游戏的优化与改进\h第14章物理传感器游戏——小球快跑\h14.1游戏背景及功能概述\h14.1.1背景概述\h14.1.2功能简介\h14.2游戏的策划及准备工作\h14.2.1游戏的策划\h14.2.2小球快跑游戏开发的准备工作\h14.3游戏的架构\h14.3.1游戏的总体架构\h14.3.2游戏的类结构\h14.4主控制类——DriftBall类的开发\h14.4.1DriftBall类的代码框架\h14.4.2DriftBall类的主要成员方法的实现\h14.5游戏主菜单的开发\h14.5.1欢迎界面类——WelcomeView类的代码框架\h14.5.2WelcomeView类主要成员方法\h14.5.3WelcomeThread类的开发\h14.5.4菜单界面的用户交互事件处理\h14.6游戏界面模块的开发\h14.6.1游戏界面类——GameView的成员变量\h14.6.2GameView的成员方法简介\h14.6.3游戏界面绘制线程——GameThread类的代码框架\h14.6.4GameMenuThread类的开发\h14.6.5用户交互事件处理\h14.7游戏中各个图层的开发\h14.7.1地图图层的开发\h14.7.2其他图层的开发与实现\h14.8游戏后台逻辑的开发\h14.8.1小球的运动控制\h14.8.2小球的碰撞检测\h14.8.3大炮相关类Cannon和Missile的开发\h14.9传感器计算模块的开发\h14.9.1手机姿态变化监听器——BallListener类的开发\h14.9.2工具类——RotateUtil类的代码框架\h14.9.3工具类——RotateUtil类的开发\h14.10游戏的优化与改进\h第15章塔防游戏——精灵塔防\h15.1游戏的背景及功能概述\h15.1.1背景概述\h15.1.2功能介绍\h15.2游戏的策划及准备工作\h15.2.1游戏的策划\h15.2.2Android平台下游戏开发的准备工作\h15.3游戏的架构\h15.3.1各个类的简要介绍\h15.3.2游戏框架简介\h15.4主控制类TafangGameActivity和数据库类DBUtil\h15.4.1主控制类——TafangGameActivity主要框架\h15.4.2主控制类——TafangGameActivity中部分数据库的实现\h15.4.3主控制类——TafangGameActivity中对话框的开发\h15.4.4数据库类DBUtil的开发\h11.5界面相关类\h15.5.1欢迎界面WelcomeView类的介绍\h15.5.2主界面MainMenuSurfaceView类的介绍\h15.5.3音效设置界面MusicSurfaceView类的介绍\h15.5.4游戏结束界面GameOverView类和帮助界面HelpView类的介绍\h15.5.5积分榜界面HighJifenSurfaceView类的介绍\h15.6游戏界面GameView及相关类\h15.6.1精灵怪物Target类\h15.6.2箭塔SingleJianta类\h15.6.3箭Shell类\h15.6.4精灵怪物的出击现场——TargetNumThread\h15.6.5箭塔控制发射线程——ShellNumThread\h15.6.6游戏地图矩阵模拟化\h15.6.7摆放箭塔守护城池\h15.6.8游戏中的2.5D效果\h15.6.9弹指间怪物灰飞烟灭——游戏水晶\h15.7游戏的优化和改进\h第16章策略游戏——回到战国\h16.1游戏的背景及功能概述\h16.1.1背景概述\h16.1.2功能简介\h16.2游戏的策划及准备工作\h16.2.1游戏的策划\h16.2.2Android平台下游戏的准备工作\h16.3游戏的架构\h16.3.1游戏的模块架构\h16.3.2游戏各个类的简要介绍\h16.4地图设计器的开发\h16.4.1底层地图设计器的开发\h16.4.2上层地图设计器的开发\h16.5Activity和游戏工具类的开发\h16.5.1主控制类——HDZGActivity的介绍\h16.5.2公式封装类——GameFormula的介绍\h16.5.3常量工具类ConstantUtil的介绍\h16.6数据存取模块的开发\h16.6.1城池信息以及地图层信息的封装类\h16.6.2数据存取相关类的介绍\h16.7英雄角色模块的开发\h16.7.1Hero类的代码框架\h16.7.2英雄运动线程——HeroGoThread类的开发\h16.7.3辅助线程——HeroBackDataThread类的开发\h16.8表示层界面模块的开发\h16.8.1滚屏类——ScreenRollView类的开发\h16.8.2滚屏线程——ScreenRollThread的开发\h16.8.3游戏界面GameView的框架介绍\h16.8.4游戏界面绘制方法onDraw的介绍\h16.8.5游戏界面屏幕监听方法onTouch的介绍\h16.8.6游戏界面后台线程GameViewThread的介绍\h16.9管理面板模块的开发\h16.9.1人物属性面板类ManPanelView的开发\h16.9.2城池管理面板类CityManageView的开发\h16.10地图中可遇实体模块的开发\h16.10.1绘制类——MyDrawable的开发\h16.10.2抽象类——MyMeetableDrawable的开发\h16.10.3森林类——ForestDrawable的开发\h16.10.4可遇实体对象的调用流程\h16.11英雄技能模块的开发\h16.11.1技能抽象类——Skill的开发\h16.11.2伐木技能类——LumberSkill的开发\h16.11.3随心步技能类——SuiXinBuSkill的开发\h16.12游戏提示模块的开发\h16.12.1提示模块抽象类——GameAlert的开发\h16.12.2点击确定按钮显示的信息类——PlainAlert的开发\h16.12.3显示粮草危机信息类——FoodAlert的开发\h16.12.4辅助线程HeroBackDataThread中对FoodAlert的调用\h16.13游戏的优化与改进\h第17章体育游戏——2D迷你桌球\h17.12D桌球的背景及功能概述\h17.1.1背景概述\h17.1.2功能简介\h17.2游戏的策划及准备工作\h17.2.1游戏的策划\h17.2.2Android平台下游戏的准备工作\h17.3游戏的架构\h17.3.1游戏的框架简介\h17.3.2各个类的简要介绍\h17.4公共类的实现\h17.4.1主控制类——GameActivity的代码框架\h17.4.2GameActivity类主要成员变量及方法的实现\h17.4.3常量类——Constant的实现\h17.5辅助界面相关类的实现\h17.5.1欢迎动画界面WelcomeView类的实现\h17.5.2主菜单界面MainMenuView的代码框架\h17.5.3主界面类——MainMenuView部分成员方法的实现\h17.5.4主界面动画线程类ViewDrawThread的实现\h17.5.5排行榜界面HighScoreView的代码框架\h17.5.6HighScoreView类的部分方法的实现\h17.6游戏界面相关类的实现\h17.6.1游戏界面GameView类的代码框架\h17.6.2GameView类部分成员方法的实现\h17.6.3键盘监听线程KeyThread类的实现\h17.6.4球运动的线程BallGoThread类的实现\h17.7情景相关类的实现\h17.7.1球台Table类的实现\h17.7.2桌球Ball类的代码框架\h17.7.3Ball类部分成员方法的实现\h17.7.4球杆Cue类的实现\h17.8自定义控件及工具类的实现\h17.8.1球与球碰撞检测的工具类CollisionUtil的实现\h17.8.2定时器Timer类的实现\h17.8.3主菜单按钮MainMenuButton类的实现\h17.8.4获取日期的工具DateUtil类的实现\h17.9游戏的优化与改进\h第18章益智游戏——3D版推箱子\h18.13D版推箱子的背景及功能概述\h18.1.1背景概述\h18.1.2功能简介\h18.2游戏的策划及准备工作\h18.2.1游戏的策划\h18.2.2Android平台下游戏开发的准备工作\h18.3游戏的架构\h18.3.1游戏的框架简介\h18.3.2各个类的简要介绍\h18.4公共类的实现\h18.4.1主控制类——MyActivity的代码框架\h18.4.2MyActivity类成员方法的实现\h18.4.3常量类Constant的实现\h18.5辅助界面相关类的实现\h18.5.1欢迎动画界面WelcomeView类的实现\h18.5.2主菜单界面MainView的实现\h18.6游戏界面相关类\h18.6.1游戏界面MySurfaceView类的设计与实现\h18.6.2键盘监听线程KeyThread\h18.7自定义控件及工具类\h18.7.1缩放图片的方法PicLoadUtil\h18.7.2主菜单上的按钮类MainMenuButton\h18.8情景相关类的实现\h18.8.1机器人类的代码框架\h18.8.2机器人类成员方法的实现\h18.8.3机器人组类RobotGroup类的实现\h18.8.4机器人组类成员方法的实现\h18.8.5圆面Circle类的实现\h18.8.6矩形纹理类TextureRect的实现\h18.8.7纹理矩形组类TextureRectGroup的实现\h18.8.8墙类Wall的实现\h18.8.9墙Wall类成员方法的实现\h18.8.10箱子Cube类的实现\h18.8.11箱子组CubeGroup类的实现\h18.8.12箱子移动CubeGo类的代码框架\h18.8.13箱子移动CubeGo类的成员方法的实现\h18.8.14地板类Floor的实现\h18.9推箱子地图设计器的开发\h18.10游戏的优化与改进\h第19章物理引擎游戏——盛怒的老鼠\h19.1游戏背景及功能概述\h19.1.1游戏开发背景\h19.1.2游戏功能概述\h19.2游戏策划及准备工作\h19.2.1游戏策划\h19.2.2游戏开发的准备工作\h19.3游戏的框架\h19.3.1游戏主要用到的技术\h19.3.2游戏各个类的介绍\h19.3.3游戏的基本框架\h19.4公共类\h19.4.1主控制类——MyBox2dActivity\h19.4.2常量类Constant\h19.5主界面的设计与实现\h19.5.1鼠头和猫头类Taj\h19.5.2鼠头和猫头控制线程——TJThread\h19.5.3主界面MainMenuView\h19.5.4刷帧线程MainMenuDrawThread\h19.6工具类\h19.6.1加载及缩放图片的工具类PicLoadUtil\h19.6.2生成刚体工具类Box2DUtil\h19.6.3声音工具类SoundUtil\h19.7刚体相关类\h19.7.1多边形类MyPolygonImg\h19.7.2猫头类BodyCat\h19.7.3冰块类BodyIce\h19.7.4木条类BodyWood\h19.7.5刚体类型枚举类BodyType\h19.7.6刚体查询工具类BodySearchUtil\h19.8游戏界面相关类\h19.8.1皮筋类Pijin\h19.8.2记录分数类Score\h19.8.3刷帧线程DrawThread\h19.8.4游戏界面类GameView\h19.9游戏优化与改进第一篇Android游戏开发核心技术第1章Android平台简介第2章Android游戏开发之前台渲染第3章Android游戏开发之交互式通信第4章Android游戏开发之数据存储和传感器第5章Android游戏开发之网络编程第6章不一样的游戏,不一样的体验第7章游戏背后的数学与物理第8章游戏中的人工智能第9章游戏开发小秘技第10章游戏的心脏——物理引擎第11章OpenGLES应用开发基础第1章Android平台简介Android是Google公司于2007年11月5日发布的基于Linux内核的移动平台,该平台由操作系统、中间件、用户界面和应用软件组成,是一个真正开放的移动开发平台。本章将介绍Android系统的起源、特点、应用程序框架以及开发环境的搭建,让读者对Android平台有个初步的了解,之后将开发第一个Android程序HelloAndroid,并通过对该程序的简单分析,带领读者步入Android开发的大门。1.1Android的来龙去脉Android的创始人AndyRubin是硅谷著名的“极客”,他离开Danger移动计算公司后不久便创立了Android公司,并开发了Android平台,他一直希望将Android平台打造成完全开放的移动终端平台。之后Android公司被Google公司看中并将其收购。不久,号称全球最大的搜索服务商Google大举进军移动通信市场,并推出自主品牌的移动终端产品。2007年11月初,Google正式宣布与其他33家手机厂商、软硬件供应商、手机芯片供应商、移动运营商联合组成开放手机联盟(OpenHandsetAlliance),并发布名为Android的开放手机软件平台,希望建立标准化、开放式的移动电话软件平台,在移动行业内形成一个开放式的生态系统。1.2掀起Android的盖头来自从Android发布以来,越来越多的人关注Android的发展,越来越多的开发人员在Android系统平台上开发应用,那是什么使Android备受青睐,什么使Android在众多移动平台中脱颖而出呢?1.2.1选择Android的理由与其他手机的操作系统相比,Android具有如下优点:●开放性;●平等性;●无界性;●方便性;●硬件的丰富性。下面将对以上各个优点进行简单介绍。1.开放性提到Android的优势,首先想到的一定是其真正的开放,其开放性包含底层的操作系统以及上层的应用程序等。Google与开放手机联盟合作开发Android的目的就是建立标准化、开放式的移动软件平台,在移动产业内形成一个开放式的生态系统。Android的开放性也同样会使大量的程序开发人员投入到Android程序的开发中,这将为Android平台带来大量新的应用。2.平等性在Android的系统上,所有的应用程序完全平等,系统默认自带的程序与自己开发的程序没有任何区别,程序开发人员可以开发个人喜爱的应用程序来替代系统的程序,构建个性化的Android手机系统,这些功能在其他的手机平台是没有的。在开发之初,Android平台就被设计成由一系列应用程序组成的平台,所有的应用程序都运行在一个虚拟机上面。该虚拟机提供了系列应用程序之间和硬件资源通信的API。3.无界性Android平台的无界性表现在应用程序之间的无界,开发人员可以很轻松地将自己开发的程序与其他应用程序进行交互,比如应用程序需要播放声音的模块,而正好你的手机中已经有一个成熟的音乐播放器,此时就不需要再重复开发音乐播放功能,只需简单地加上几行代码即可将成熟的音乐播放功能添加到自己的程序中。4.方便性在Android平台中开发应用程序是非常方便的,如果对Android平台比较熟悉,想开发一个功能全面的应用程序并不是什么难事。Android平台为开发人员提供了大量的实用库及方便的工具,同时也将GoogleMap等强大的功能集成了进来,只需简单的几行调用代码即可将强大的地图功能添加到自己的程序中。5.硬件的丰富性由于平台的开放,众多的硬件制造商推出了各种各样的产品,但这些产品功能上的差异并不影响数据的同步与软件的兼容,例如,原来在诺基亚手机上的应用程序,可以很轻松地被移植到摩托罗拉手机上使用,且联系人、短信息等资料更是可以方便地转移。1.2.2Android的应用程序框架从软件分层的角度来说,Android平台由应用程序、应用程序框架、Android运行时库层以及Linux内核共4部分构成,本节将分别介绍各层的功能,分层结构如图1-1所示。▲图1-1Android平台架构图1.应用程序层本层的所有应用程序都是用Java编写的,一般情况下,很多应用程序都是在同一系列的核心应用程序包中一起发布的,主要有拨号程序、浏览器、音乐播放器、通信录等。该层的程序是完全平等的,开发人员可以任意将Android自带的程序替换成自己的应用程序。2.应用程序框架层对于开发人员来说,接触最多的就是应用程序框架层。该应用程序的框架设计简化了组件的重用,其中任何一个应用程序都可以发布自身的功能供其他应用程序调用,这也使用户可以很方便地替换程序的组件而不影响其他模块的使用。当然,这种替换需要遵循框架的安全性限制。该层主要包含以下9部分,如图1-2所示。▲图1-2应用程序框架●活动管理(ActivityManager)。用来管理程序的生命周期,以及提供最常用的导航回退功能。●窗口管理(WindowManager)。用来管理所有的应用程序窗口。●内容管理(ContentProviders)。通过内容管理,可以使一个应用程序访问另一个应用程序的数据,或者共享数据。●视图管理(ViewSystem)。用来构建应用程序的基本组件,包括列表、网格、按钮、文本框,甚至是可嵌入的Web浏览器。●包管理(PackageManager):用来管理Android系统内的程序。●电话管理(TelephonyManager)。所有的移动设备的功能统一归电话管理器管理。●资源管理(ResourceManager)。资源管理器可以为应用程序提供所需要的资源,包括图片、文本、声音、本地字符串,甚至是布局文件。●位置管理(LocationManager)。该管理器是用来提供位置服务的,如GPRS定位等。●通知管理(NotificationManager)。主要对手机顶部状态栏的管理,开发人员在开发Android程序时会经常使用,如来短信提示、电量低提示,还有后台运行程序的提示等。3.Android运行时库该层包含两部分,程序库及Android运行时库。程序库为一些C/C++库,这些库能够被Android系统中不同的应用程序调用,并通过应用程序框架为开发者提供服务。而Android运行时库包含了Java编程语言核心库的大部分功能,提供了程序运行时所需调用的功能函数。程序库主要包含的功能库如图1-3所示。●libc。是一个从BSD继承来的标准C系统函数库,专门针对移动设备优化过的。●MediaFramework。基于PacketVideo公司的OpenCORE。支持多种常用音频、视频格式回放和录制,并支持多种图像文件,如MPEG-4、H.264、MP3、AAC、AMR、JPG、PNG等。●SurfaceManager。SurfaceManager主要管理多个应用程序同时执行时,各个程序之间的显示与存取,并且为多个应用程序提供了2D和3D图层无缝的融合。●SQLite。所有应用程序都可以使用的轻量级关系型数据库引擎。●WebKit。是一套最新的网页浏览器引擎。同时支持Android浏览器和一个可嵌入的Web视图。●OpenGLIES。是基于OpenGLES1.0API标准来实现的3D绘制函数库。该函数库支持软件和硬件两种加速方式执行。●FreeType。提供位图(bitmap)和矢量图(vector)两种字体显示。●SGL。提供了2D图形绘制的引擎。Android运行时库包括核心库及Dalivik虚拟机,如图1-4所示。▲图1-3程序库框架▲图1-4Android运行时库●核心库(CoreLibraries)。该核心库包括Java语言所需要的基本函数以及Android的核心库。与标准Java不一样的是,系统为每个Android的应用程序提供了单独的Dalvik虚拟机来执行,即每个应用程序拥有自己单独的线程。●Dalvik虚拟机(DalvikVirtualMachine)。大多数的虚拟机(包括JVM)都是基于栈的,而Dalvik虚拟机则是基于寄存器的,它可以支持已转换为.dex格式的Java应用程序的运行。.dex格式是专门为Dalvik虚拟机设计的,更适合内存和处理器速度有限的系统。4.Linux内核Android平台中操作系统采用的是Linux2.6内核,其安全性、内存管理、进程管理、网络协议栈和驱动模型等基本依赖于Linux。对于程序开发人员,该层为软件与硬件之间增加了一层抽象层,使开发过程中不必时时考虑底层硬件的细节。而对于手机开发商而言,对此层进行相应的修改即可将Android平台运行到自己的硬件平台之上。1.3Android开发环境的搭建本节主要讲述如何构建基于Eclipse的Android开发环境,之后对开发环境进行测试并创建第一个Android应用程序HelloAndroid。1.3.1SDK的下载及安装前面已经对Android平台进行了简单的介绍,从本节开始,将带领读者逐步搭建自己的开发环境,具体的步骤如下。(1)登录到SUN官方网站/javase/downloads下载最新的JDK安装程序。(2)双击刚刚下载的JDK安装程序jdk-6u18-windows-i586.exe,根据提示将JDK安装到默认目录。(3)右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:\ProgramFiles\Java\jdk1.6.0_18”的环境变量。(4)再打开Path环境变量,在最后加上“C:\ProgramFiles\Java\jdk1.6.0_18\bin;”,单击“确定”按钮即可。(5)到页面下载最新的SDK,本书使用的版本是2.1,其他版本的安装与配置方法基本相同。(6)将下载好的SDK压缩包解压到C盘根目录下,如图1-5所示。▲图1-5AndroidSDK安装环境(7)右键单击我的电脑,依次选择属性/高级/环境变量,打开Path系统环境变量,在其最后加上SDK的解压目录中的tools目录“C:\android-sdk-windows\tools”,单击“确定”按钮完成配置,如图1-6所示。1.3.2Eclipse集成开发环境的搭建上一小节已经讲解了SDK的安装与配置,本小节将带领读者构建基于Eclipse的集成开发环境,具体步骤如下。(1)读者只需登录到/downloads/即可下载最新版本的Eclipse安装程序,本书采用的版本是3.5.1。(2)将下载好的Eclipse安装程序解压到C盘根目录下,如图1-7所示。(3)双击C:\eclipse目录下的eclipse.exe文件,运行Eclipse,再依次单击菜单Help/InstallNewSoftware项,如图1-8所示。▲图1-6SDK环境变量配置▲图1-7Eclipse安装目录▲图1-8Eclipse的软件安装(4)单击弹出的Install界面中的“Add”按钮,在Name栏中输入任意的名字,并在Location栏中输入ADT的下载地址/android/eclipse/,如图1-9所示。▲图1-9填写ADT地址提示如果输入的地址不能正常下载ADT,读者可以尝试将/android/eclipse/改为/android/eclipse/。如果出现下载的ADT与已经安装的SDK版本不兼容的情况,可以手动下载ADT压缩包,然后单击“Archive”按钮选择手动下载ADT压缩文件即可安装,如图1-10所示。▲图1-10选择ADT压缩文件(5)在Install界面上选中“DeveloperTools”并单击“Next”按钮,如图1-11所示。▲图1-11选择DevelpoerTools(6)在弹出的界面中,直接单击“Finish”按钮,如图1-12所示。Eclipse将弹出提示窗口,单击“Yes”按钮,系统将自动重启Eclipse,到此为止已经完成ADT的安装。(7)重启Eclipse后,依次选择Window/Preferences项,如图1-13所示。▲图1-12ADT安装完成界面▲图1-13选择“Preferences”菜单(8)在弹出的窗口中选择左侧的“Android”,然后通过单击右侧的“Browse”按钮来选择SDK的安装目录,单击“OK”按钮完成配置,如图1-14所示。1.3.3虚拟设备的创建与模拟器的运行前几小节已经完成了Eclipse集成环境的搭建工作,但在运行模拟器前还需要创建AVD(AndroidVirtualDevice,Android虚拟设备)。AVD实质上是用来描述模拟器属性的,有了AVD开发人员可以为自己的模拟器进行必要的设置,如屏幕尺寸、内存等。本节将运用之前搭建好的Eclipse环境创建虚拟设备并运行模拟器,具体步骤如下。(1)在系统的开始菜单中单击“运行”按钮,在弹出的窗口中输入“cmd”进入命令行,如图1-15所示。▲图1-14Preferences配置(2)通过cd命令导航到android的安装目录下的tools下,并通过androidlisttarget命令来显示当前可用的目标机,如图1-16所示。▲图1-15启动cmd命令行▲图1-16当前可用的目标机(3)然后通过androidcreateavd--nameandroid21--target6命令创建一个名为android21、目标机id为6的AVD,创建的AVD默认存放在我的文档下,而Android的AVD并不支持中文目录,可以通过配置ANDROID_SDK_HOME环境变量来指定所创建的AVD的存放位置。提示除了使用命令行方式来创建AVD外,还可以使用Eclipse自带的AVDManager来创建。在Eclipse中依次选择“Window/AndroidSDKandAVDManager”打开AVD管理界面,如图1-17和图1-18所示;在AVD管理界面中不仅可以创建AVD,还可以对已经存在的AVD进行管理。▲图1-17打开AVD管理器▲图1-18AVD管理界面(4)在cmd命令行中导航到android的tools目录后输入emulator-avdandroid21命令启动Android模拟器,如果安装和配置正确的话,将出现如图1-19所示的模拟器界面。▲图1-19Android2.1模拟器效果图提示运行模拟器时可能会很慢,有时甚至可能达到几分钟时间,如果没有报错,请读者耐心等待。1.3.4第一个Android程序前面已经对Android的开发环境和模拟器进行配置,本小节将带领读者构建第一个Android程序并对该程序进行简单的讲解。1.创建第一个Android应用程序(1)启动Eclipse,依次选择“File/New/Other…Eclipse”将弹出创建项目的窗口,如图1-20所示。(2)选择“AndroidProject”,单击“Next”按钮,将弹出填写项目信息的界面,如图1-21所示。▲图1-20创建项目界面▲图1-21填写项目信息(3)填写如图1-21所示的信息后单击“Finish”按钮即可完成项目的创建。创建后可在PackageExplorer窗口中观察到项目的目录结构,如图1-22所示。(4)在项目名上单击鼠标右键,然后依次选择“RunAs/AndroidApplication”即可运行刚才创建的HelloAndroid项目,运行效果如图1-23所示。提示因为有很多程序或者游戏是横屏模式的,所以在程序调试过程中,可能需要将模拟器切换成横屏模式,读者可以通过使用快捷键Ctrl+F12来切换模拟器的横竖屏模式,HelloAndroid程序在横屏模拟器中运行效果如图1-24所示。▲图1-22HelloAndroid项目目录结构▲图1-23HelloAndroid项目竖屏效果图▲图1-24HelloAndroid项目横屏效果图2.HelloAndroid的简单讲解通过前面的学习,读者已经能够创建并运行简单的Android程序了,但可能对Android项目还不够了解,接下来将通过对HelloAndroid程序的详细介绍使读者了解Android项目的目录结构以及HelloAndroid的运行机理。(1)先来看看HelloAndroid项目中各个目录和文件的作用。●src目录,src目录用来存放应用程序中所有的源代码,代码的源文件一般是存放在相应的包下面,在开发Android应用程序时,大部分时间都是在编写src中的源代码。●gen目录,该目录下一般只有一个文件,即R文件。该文件是由ADT自动产生的,存放的是应用程序中所使用的全部资源文件的ID,在应用程序开发过程中只是使用R文件,一般不需人工修改该文件。●Android2.1目录。该目录存放的是项目所需要的支持.jar包。●assets目录。该目录存放应用程序中使用的外部资源文件,程序中可以通过输入/输出流对该目录中的文件进行读写。●res资源目录:该目录下有多个目录,分别用来存放程序中用到的图片、界面布局文件及XML格式的描述文件。●AndroidManifest.xml。该文件是整个程序的系统控制文件,是每个应用程序都不可缺少的。其描述了应用程序有哪些组件、哪些资源、哪些权限等。(2)AndroidManifest.xml文件是该项目的系统控制文件,该文件的代码如下。代码位置:见随书光盘中源代码/第1章/Sample_1_1目录下的AndroidManifest.xml。●第1~5行定义了程序的版本、编码方式、用到的架构以及该程序所在的包与版本号。●第6行定义了程序在手机上的显示图标及显示名称。●第8~14行定义了一个名为HelloAndroid的Activity以及该Activity能够接受的Intent。(3)main.xml是该项目的布局文件,其代码如下。代码位置:见随书光盘中源代码/第1章/Sample_1_1/res/Layout目录下的main.xml。●第2行定义了布局方式为LinearLayout,且左右和上下的填充方式为fill_parent。●第7行中向该布局中添加了一个TextView控件,其宽度和高度模式分别为fill_parent、wrap_content,在TextView控件显示的内容为string.xml中的hello的内容。(4)项目的主类HelloAndroid.java的代码如下。代码位置:见随书光盘中源代码/第1章/Sample_1_1/src/wyf/ytl目录下的HelloAndroid.java。●第4行是对继承自Activity子类的声明。●第6~9行重写了Activity的onCreate回调方法,在onCreate方法中先调用基类的onCreate方法,然后指定用户界面为R.layout.main,对应的文件为res/layout/main.xml。1.3.5Android程序的监控与调试前面几个小节已经对Android应用程序的创建进行了详细讲解,本小节将介绍如何通过DDMS来监控Android应用程序的运行以及如何调试Android程序。在调试过程中使用了android.util.log类,该类简单易用。监控与调试详细步骤如下。(1)打开刚刚建立的项目,找到HelloAndroid.java文件,在第8行super.onCreate(savedInstanceState);之后添加“Log.d("TAG","Thisismessage!");”语句。(2)在项目名上单击鼠标右键,然后依次选择“RunAs/AndroidApplication”运行该项目。(3)依次单击Eclipse右上角的OpenPerspective/Other,如图1-25所示。Eclipse将弹出“OpenPerspective”对话框,如图1-26所示。▲图1-25打开OpenPerspective窗口▲图1-26切换到DDMS视图(4)单击“OK”按钮后将Eclipse切换到DDMS视角,如图1-27所示。LogCat显示在屏幕的下方,系统中所有的日志都将出现在LogCat中,通过对LogCat的观察可以详细了解Android程序运行的过程。▲图1-27LogCat界面提示在程序的开发和调试过程中,少不了对文本的输出,而在Android程序的开发中,建议使用Log类来打印需要打印的文本。(5)在图1-27中可以看到在程序中添加的日志输出,这样在程序的开发过程中可以随时使用Log类来打印需要打印的信息,而当LogCat中日志过多时,可以使用过滤器Filter通过对tag进行过滤来筛选log。1.4小结本章介绍了Android平台的来源及优点,并详细介绍了在Eclipse中如何构建Android的开发环境,最后创建了第一个Android的应用程序。通过本章的学习,读者应该已经对Android平台下应用程序的开发步骤有了初步的了解。第2章Android游戏开发之前台渲染在正式动手开发游戏之前,有必要先对Android的前台渲染技术进行学习,掌握了这些知识,才能更好地学习游戏的开发。本章将对Android游戏开发的前台渲染技术进行详细介绍,为以后各章节的游戏开发做好技术储备。2.1创建Android用户界面任何程序都少不了用户界面,游戏也不例外,本节将对Android应用中常用的用户界面、布局管理以及简单的事件处理进行介绍。2.1.1布局管理Android的控件有很多种,需要使用Layout对这些控件进行管理,以使这些控件显示在屏幕的正确位置。AndroidSDK中已经内置了5种布局模型,开发人员通过对这几种布局模型进行组合便可构建出各种复杂的用户界面。下面将对这5种布局模型进行详细的讲解。1.线性布局线性布局(LinearLayout)是Android应用程序中最简单的布局方式,有水平和竖直两种排列方式,通过对参数的设置可以控制各个控件在布局中的相对大小。接下来将通过一个简单的例子来介绍线性布局的使用方法,该例子最终的效果如图2-1所示,其开发步骤如下。▲图2-1线性布局(1)创建一个新项目Sample_2_1,然后在res/layout下创建XML布局文件my_layout.xml,并在其中输入如下代码。代码位置:见随书光盘中源代码/第2章/Sample_2_1/res/layout目录下的my_layout.xml。●第2~6行是一个垂直的线性布局,宽度填满整个屏幕,高度自动适应子控件的大小。●第7~11行向线性布局中添加一个按钮控件,宽度和高度全部填满父控件。●第12~16行又向外层的线性布局中添加一个水平的线性布局,高度和宽度全部适应子控件。●第17~26行往水平的线性控件中依次添加两个按钮控件。(2)打开src/wyf/ytl目录下的Sample_2_1.java,将其代码修改为如下代码。代码位置:见随书光盘中源代码/第2章/Sample_2_1/src/wyf/ytl目录下的Sample_2_1.java。●第5~8行重写Activity的onCreate方法,该方法在Activity创建时被系统调用。●第9行指定当前显示的主界面为my_layout.xml。提示为了不干扰读者的思路,本章例子中按钮上的文字全部写在程序中,读者可以将这些文字提取到strings.xml文件中,为以后程序的维护与修改提供便利。2.表格布局表格布局(TableLayout)是以行列的形式来管理子控件的,在表格布局中的每一行可以是一个View控件或者是一个TableRow控件。而TableRow控件中还可以添加子控件。下面通过一个简单的例子来说明表格布局的使用方法,运行效果如图2-2所示,其开发步骤如下。▲图2-2表格布局(1)创建一个新项目Sample_2_2,然后在res/layout下创建XML布局文件my_layout.xml,并在其中输入如下代码。代码位置:见随书光盘中源代码/第2章/Sample_2_2/res/layout目录下的my_layout.xml。●第2~5行定义了一个宽高全部填满屏幕的TableLayout。●第6~11行向TableLayout中的第一行添加一个TextView控件,并且设置对齐方式为居中。●第22~27行添加TableRow控件并继续添加两个自适应宽高的TextView控件。●第28~41行再向TableLayout中添加一行,并直接向该行中添加两列,每列一个按钮。提示表格布局中,每行可以是其他控件,而每列也可以是其他控件,在程序的开发过程中常常使用表格布局来排版。(2)和前面的例子一样,编写完布局文件后,应该将该布局文件设为当前显示的用户界面,设置方法与线性布局的例子一样,因本书篇幅所限,就不再赘述,读者可以参考线性布局的例子自行更改。3.相对布局相对布局(RelativeLayout)也比较简单,其子控件是根据所设置的参照控件来进行布局的,设置的参照控件可以是父控件,也可以是其他的子控件。下面通过一个简单的例子来介绍相对布局的使用方法,该例子运行的效果如图2-3所示,其开发步骤如下。(1)创建项目Sample_2_3,在res/layout下添加布局文件my_layout.xml,代码如下。▲图2-3相对布局代码位置:见随书光盘中源代码/第2章/Sample_2_3/res/layout目录下的my_layout.xml。●在第2~5行定义了一个相对布局,宽高全部填满父控件,即填满整个屏幕。●第6~12行定义了一个参照按钮控件,宽高自适应,位置为父控件的正中间。●第14~22行添加一个按钮控件,宽高自适应,位于参照控件的左上方。●第23~31行继续添加一个按钮控件,宽高仍然是自适应,位于参照控件的右下方。(2)接下来是更改Sample_2_3.java源代码,将刚刚编写的布局设为当前用户界面,设置方法同线性布局的例子一样,在此不再赘述,读者可查看随书光盘中源代码/第2章/Sample_2_3/src/wyf/ytl下的Sample_2_3.java文件。4.单帧布局单帧布局的使用方法更为简单,不需要任何特殊的配置,布局中的所有控件都被放置在布局的左上角。下面的例子是将3个ImageView控件添加到一个单帧布局中,效果如图2-4所示,其开发步骤如下。▲图2-4单帧布局(1)创建一个名为Sample_2_4的新项目,在该项目的res/layout下添加名为my_layout.xml的布局文件,其代码如下。代码位置:见随书光盘中源代码/第2章/Sample_2_4/res/layout目录下的my_layout.xml。●在第2~5行定义了一个单帧布局,宽高全部填满父控件,即填满整个屏幕。●第6~23行向单帧布局中顺序添加3个ImageView控件。这些控件将全部对齐到布局的左上角,ImageView控件的android:src="@drawable/big"属性设置为res/drawable-mdpi下的图片文件。提示Android平台中,图片等资源文件不支持大写字母,读者如希望使自己的资源图片名称更简洁、清晰,可以使用下划线来分割资源名中的单词。(2)最后,同样是将刚编写的单帧布局设为当前显示的用户界面,设置方法同前面的例子完全相同,读者可以自行开发。5.坐标布局下面介绍最后一个布局——坐标布局。该布局在程序开发中应用得较多,其中所有控件的位置坐标是直接指定的,这样屏幕中的控件位置完全由自己控制,增强了灵活性,下面的例子介绍了该布局的使用方法,运行效果如图2-5所示。▲图2-5坐标布局(1)创建新项目Sample_2_5,在res/layout下创建my_layout.xml,其代码如下。代码位置:见随书光盘中源代码/第2章/Sample_2_5/res/layout目录下的my_layout.xml。●第2~5行定义了一个坐标布局,并设置其填满整个屏幕。●第6~35行向坐标布局中添加4个控件,通过layout_x和layout_y两个属性确定控件的位置。(2)设置当前显示的用户界面为刚编写的布局界面,设置的方法与前面的例子相同,读者可查看随书光盘中源代码/第2章/Sample_2_5/src/wyf/ytl下的Sample_2_5.java文件。2.1.2常用控件及其事件处理Android中提供了大量丰富多彩的常用控件,Android平台已经完整地实现了这些控件功能,开发人员只需简单的几句调用或参数设置的语句即可用其构建完整的用户界面。Android中控件的使用方法一般有两种,一种是在XML中配置,而另一种是在Java程序中直接调用。在游戏开发过程中,很少使用在XML中配置的方法,一般都是在Java源代码中直接使用。常用的控件有TextView、ImageView、CheckBox、RadioButton、Button、ImageButton、EditText、ToggleButton、AnalogClock、DigitalClock等。这些控件的使用方法基本相同,接下来将通过一个简单的例子来讲解控件的使用方法以及Android平台的事件处理,具体开发步骤如下。(1)创建一个名为Sample_2_6的新项目。(2)打开main.xml布局文件,将其中的代码替换成下列代码。代码位置:见随书光盘中源代码/第2章/Sample_2_6/res/layout目录下的main.xml。●第2~5行定义了一个垂直的线性布局,宽高全部填充满屏幕。●第7~12行向线性布局中添加一个文本控件,宽度填满父控件,高度自适应子控件,用于显示被单击的按钮。●之后依次向布局中添加3种按钮,每个控件的宽度和高度全部设置为自适应子控件,并指定其控件的ID,使Java程序中可以找到该控件。提示该程序中用到了图片资源,在使用图片之前应该先将用到的图片资源放到Sample_2_6/res/drawable-mdpi文件夹下。(3)打开系统自动创建的Sample_2_6.java文件,将其内容改为如下代码。代码位置:见随书光盘中源代码/第2章/Sample_2_6/src/wyf/ytl目录下的Sample_2_6.java。●第11~14行声明了3种按钮及文本控件的引用。●第19行是将main布局文件设置为当前显示的View。●第20~23行通过布局文件中控件的ID得到各个控件的引用。●第24~26行为各个控件添加监听。●第28~38行重写了事件监听器的回调方法。当单击不同控件时分别做不同的处理。(4)运行本例子,将看到如图2-6所示的效果,当用户单击按钮时,文本的内容会随之改变。▲图2-6控件及事件监听提示在此通过3种按钮控件来讲解Android中控件的使用方法以及控件事件的处理方法,Android中各个控件的使用方法基本相同,读者可以模仿本例学习其他控件的使用。2.2图形与动画在Android中的实现程序开发过程中,图形、动画是必不可少的,本节将详细讲解图形、动画在Android中的实现,通过对本节的学习,使读者能够构建出简单的图形用户界面。2.2.1简单图形的绘制在Android游戏的开发中,时时都需要绘制图形、图片,接下来将通过一个绘制图形的例子,让读者理解Android中图形绘制的机理,其开发步骤如下。(1)创建一个新项目Sample_2_7,然后在src/wyf/ytl目录下创建文件MyView.java,并在其中输入下面的代码。代码位置:见随书光盘中源代码/第2章/Sample_2_7/src/wyf/ytl目录下的MyView.java。●第10~12行为该类的构造器,View下构造器有3种重载方式,如需在XML中配置应用该View,必须实现该构造器。●第13行重写负责绘制的onDraw方法,第15行绘制View的背景色为黑色,而第16~17行创建并设置画笔。●第18行向View中绘制矩形,drawRect的前4个参数分别为左上角的x、y和右下角的x、y。●第19行向View中绘制字符串,需要注意的是,之后的两个参数为字符串所占矩形的左下角x、y。●第20~21行先创建一个矩形对象,然后根据矩形对象的大小和位置绘制弧形,给出起始的角度和终止的角度。●第22行绘制直线,前4个参数为起始点的x、y以及终点的x、y。第23~24行同样创建一个矩形对象,并根据矩形绘制圆。(2)将res/layout下的main.xml文件的代码改为如下代码。代码位置:见随书光盘中源代码/第2章/Sample_2_7/res/layout目录下的main.xml。说明代码的第7~10行在垂直的线性布局中添加自定义的View,并为它指定ID,宽度和高度全部填充父控件。(3)在模拟器中运行该项目,观察的效果如图2-7所示。提示在XML中配置自定义的View需要使用全称类名,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能多功能按摩垫赋能养老产业:重构银发族居家照护价值链
- 关于浙江省电子信息制造园项目可行性研究报告
- 企业数据合规审计流程优化及常见问题解决方案汇编
- 校园公益项目策划与执行
- 2024年滨州市技师学院高职部高职单招职业技能考试模拟试卷带答案详解(能力提升)
- 2027年湖南三一工业职业学院高职单招职业适应性测试考试题库(易错题)附答案详解
- 2027年宁夏银川凤城职业学院高职单招职业适应性测试考试模拟试卷附完整答案详解【夺冠系列】
- 2027年山东石岛职业学院高职单招职业技能考试模拟试卷(突破训练)附答案详解
- 2024年陕西现代装备职业学院高职单招职业适应性测试考试模拟试卷附参考答案详解【培优A卷】
- 2025年山东康养职业学院单招综合素质考试题库(培优B卷)附答案详解
- 2026交管12123学法减分题库200题(含标准答案)
- 特种设备相关法规标准现状及更新情况介绍
- 2026年危货运输安全管理试题及答案
- 2026年北京市海淀区五年级数学下册期末考试试卷及答案
- 中国炎症性肠病诊疗质量控制评估体系(第二版)
- 临床 银离子敷料使用 实操实训|手把手教学操作指南
- GB/T 1040.4-2026塑料拉伸性能的测定第4部分:各向同性和正交各向异性纤维增强复合材料的试验条件
- 2025浙能集团甘肃有限公司新能源项目招聘22人笔试参考题库附带答案详解(10套)
- GB 2536-2025电工流体变压器和开关用的未使用过的矿物绝缘油
- 信访档案规范管理办法
- 2025广西农垦集团第一批公开招聘381人笔试参考题库附带答案详解
评论
0/150
提交评论