《Android 应用案例开发大全(第二版)》——2.3节案例的基本框架

简介:

本节书摘来自异步社区《Android 应用案例开发大全(第二版)》一书中的第2章,第2.3节案例的基本框架 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.3 案例的基本框架
Android 应用案例开发大全(第二版)
对本案例中每个类进行详细介绍之前,首先要对本案例的基本框架进行简单的介绍。本节将要介绍案例的框架以及案例中各个类的作用,以及类与类之间的关系,从而使读者在阅读后面的章节时可以更好地理解案例的详细开发过程。

2.3.1 壁纸项目的框架结构
本小节将对3D水族馆动态壁纸的整体框架进行介绍,使读者对本案例的开发过程有深刻的理解,更加熟悉了解壁纸的制作流程,其框架如图2-14所示。


f1d6648230f6a91340b8341759cd25b4ba85420f

从图2-14中可以看出,本项目中包含很多不同的类,主要分为5大类。分别是壁纸实现类、绘制类、线程类、工具常量类及辅助绘制类等。这里简单了解一下即可,后面的小节将进一步进行较为详细的介绍。

2.3.2 各个类的简要介绍
为了让读者更好地理解本案例中各个类的作用及各个类之间的联系,本小节将按照上小节划分的5大类对所有本项目中的类一一进行简要介绍,具体内容如下。

1.壁纸实现类
壁纸服务类GLWallpaperService。
该类是3D水族馆动态壁纸的基础类。此类为壁纸项目的开发提供了服务接口,开发人员通过重写该类中的onCreateEngine方法等来实现壁纸功能。

动态壁纸类LiveWallpaper。
该类是实现3D水族馆动态壁纸的重要类。此类继承了壁纸服务类GLWallpaperService,并且重写了onCreateEngine 方法,在该方法内创建了自定义的场景渲染器,并且将该渲染器的渲染方式设置为主动渲染模式。

自定义渲染器类TDRender。
该类是3D水族馆动态壁纸案例中的核心类。在这个类中创建了本案例中需要绘制的所有对象,初始化需要的纹理,设置摄像机位置,设置各个对象的绘制方式等。

2.绘制类
气泡控制类BubbleControl。
该类是所有气泡的控制类。该类定义了所有气泡并将气泡对象添加到气泡列表中,创建并启动气泡移动线程,然后根据气泡的位置对气泡进行排序,最后遍历气泡列表并绘制气泡。

单个气泡类SingleBubble。
该类的作用是绘制场景中的单个气泡。在此类中定义了气泡的所有属性,如气泡的位置、纹理、气泡的最大高度等。每调用一次此类中的bubbleMove方法,气泡就会移动一小段距离,如果气泡的Y位置大于气泡高度的最大值,就会调用newPosition方法重新设置气泡的位置和气泡的最大高度,这里气泡的位置和最大高度是在一定范围内随机给出的。

群鱼控制类FishControl。
该类是群鱼的控制类(群鱼是指不包括鱼群的所有单条鱼的集合)。在该类中定义了群鱼列表,列表中存放着所有的单条鱼对象,创建并启动鱼的移动线程,最后遍历群鱼列表对单条鱼进行绘制。

单条鱼类SingleFish。
该类的作用是绘制单条鱼。在此类中定义了单条鱼的所有属性,包括鱼的位置、速度、外力、鱼食对鱼的吸引力、鱼的质量(力的缩放比)、鱼的旋转角度等。该类中的fishMove方法用来计算鱼的旋转角度,鱼所受到的外力(包括鱼和鱼群之间)和鱼食对鱼的吸引力,这两个力动态改变着鱼的游动速度大小和游动方向。

鱼群控制类FishSchoolControl。
该类是鱼群的控制类。在此类中定义了鱼群中的每条鱼,这些鱼组成了可以一起游动的鱼群,鱼群中的第一条鱼不受到其他任何鱼的外力,只受墙壁作用力。创建并启动鱼群的游动线程,遍历鱼群列表实现对鱼群的绘制。

单个鱼群类FishSchoolSingle。
该类的作用是绘制鱼群里的单条鱼。在此类中定义了鱼群中每条鱼的所有相关属性,具体包括鱼的位置、速度、外力、鱼偏离相对位置(以鱼群中第一条鱼所在的位置为球心,以定长半径确定的球面上的一个点)后受到的向心力、鱼的质量、鱼的旋转角度等。该类中的fishschoolMove方法用来计算鱼的旋转角度和修改鱼的速度。

鱼食类SingleFood。
该类的作用是创建并启动线程,绘制鱼食。在此类中定义了食物的移动线程,计算鱼食对鱼的吸引力线程,食物的y坐标,并创建了启动以上两个线程的方法startFeed,最后绘制鱼食。

喂食类FeedFish。
该类是食物的控制类。此类的startFeed方法用来计算触控点与摄像机所在位置连成的直线与地面交点的世界坐标系坐标,如果是第一次调用此方法,此方法还会调用SingleFood的startFeed方法来启动SingleFood中创建的两个线程。

3.线程类
气泡移动线程类BubbleThread。
该类是气泡的移动线程。在此类中会不断遍历气泡列表调用气泡对象中的bubbleMove方法,从而实现气泡的移动。

群鱼游动线程类FishGoThread。
该类是群鱼游动线程类。在此类中遍历群鱼列表判断两条鱼之间的距离,若距离小于阈值,则两条鱼之间会产生力的作用。对鱼进行碰壁检测,当鱼与墙壁的距离小于阈值时鱼会受到与墙壁垂直的力。然后修改鱼所受到的外力、鱼的速度和位置。

鱼群游动线程类FishSchoolThread。
该类是鱼群游动线程类。在此类中遍历鱼群列表并判断鱼群中的鱼(不包括第一条鱼)与相对位置 (以鱼群中第一条鱼所在位置为球心,以定长半径确定的球面上的一个点)的距离,若距离大于阈值就会对该条鱼产生向心力。然后对鱼群进行碰壁检测,碰壁时鱼群受到一个与墙壁垂直的力。最后修改鱼所受到的外力、鱼群的速度和位置。

鱼食移动线程类FoodThread。
该类是鱼食移动线程类。在此类中只要喂食线程的标志位没有被置成false就会不断修改鱼食的X方向和Z方向的位置使鱼食产生晃动效果。然后定时修改鱼食的Y位置。

鱼食对鱼产生吸引力线程类AttractThread。
该类是鱼食对鱼产生吸引力的线程类。在此类中不断遍历群鱼列表判断鱼是否能看到鱼食,如果鱼能看到鱼食,则该鱼受到鱼食的吸引力作用使鱼向着鱼食游动,当鱼与鱼食之间的距离小于阈值后鱼食消失,认定鱼食已经被鱼吃掉。本案例中鱼食对鱼群中的鱼不产生吸引力作用。

4.工具常量类
常量类Constant。
该类是整个壁纸中用到的所有静态常量集合。将一些常用静态常量定义到常量类Constant中,会降低程序的维护成本,同时会增强程序的可读性。

向量类Vector3f。
该类是本案例中用到的三维向量对象。包含了案例中所有需要的向量算法,具体包括求向量的模、向量的减法、向量的加法,向量的归一化等。

模型加载类LoadUtil。
该类作用是加载obj文件中模型的相关信息,然后生成顶点数据、纹理坐标数据(有时也会生成法向量数据)、最后构造对应的模型对象。

摄像机矩阵类MatrixUtil。
MatrixUtil类的setCamera方法通过调用Matrix类的SetLookAtM方法生成摄像机的观察矩阵。Matrix类的UtilfromGToO方法用于求经指定变换矩阵逆矩阵恢复的点坐标。

屏幕拾取类IntersectantUtil。
该类是和拾取相关的工具类(主要是在对鱼进行喂食的时候会用到该类中包含的相关算法),通过拾取计算获得摄像机位置所在点与屏幕触控点连线和地面交点的世界坐标系坐标。

5.辅助绘制类
背景图辅助绘制类BackGround。
该类的主要作用是构造水族馆背景和地面的纹理矩形。

气泡辅助绘制类Bubble。
该类主要是构造一个纹理矩形并贴上气泡纹理从而用于气泡的绘制。

模型辅助绘制类LoadedObjectVertexNormalTexture。
该类的主要作用是对加载的模型信息进行处理,形成顶点坐标缓冲和纹理坐标缓冲,并将相关的缓冲数据送入渲染管线,用于绘制。

相关文章
|
7天前
|
XML 存储 Java
探索安卓开发之旅:从基础到进阶
【9月更文挑战第37天】安卓开发,一个充满无限可能的领域。它不仅关乎技术的深度与广度,更关乎开发者的成长与突破。本文将带你走进安卓开发的世界,从基础知识的学习到进阶技巧的掌握,一起感受编程的魅力与乐趣。
|
4天前
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
22 4
Android开发表情emoji功能开发
|
2天前
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
13 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
|
4天前
|
JSON API Android开发
探索安卓开发之旅:打造你的第一个天气应用
在这篇文章中,我们将一起踏上一段激动人心的旅程,学习如何在安卓平台上开发一个简单的天气应用。通过实际操作和代码示例,我们将逐步构建一个能够显示当前位置天气情况的应用。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供清晰的指导和启发性的见解,帮助你理解和掌握安卓开发的基础知识。让我们一起探索代码的世界,解锁新技能,实现你的创意和梦想。
|
1天前
|
缓存 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的海洋中,自定义控件是那片璀璨的星辰。它不仅让应用界面设计变得丰富多彩,还提升了用户体验。本文将带你探索自定义控件的核心概念、实现过程以及优化技巧,让你的应用在众多竞争者中脱颖而出。
|
1天前
|
前端开发 搜索推荐 Android开发
安卓开发中的自定义控件实践
【10月更文挑战第4天】在安卓开发的世界里,自定义控件如同画家的画笔,能够绘制出独一无二的界面。通过掌握自定义控件的绘制技巧,开发者可以突破系统提供的界面元素限制,创造出既符合品牌形象又提供卓越用户体验的应用。本文将引导你了解自定义控件的核心概念,并通过一个简单的例子展示如何实现一个基本的自定义控件,让你的安卓应用在视觉和交互上与众不同。
|
1天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
15 1
|
8天前
|
安全 Java API
Java 泛型在安卓开发中的应用
在Android开发中,Java泛型广泛应用于集合类、自定义泛型类/方法、数据绑定、适配器及网络请求等场景,有助于实现类型安全、代码复用和提高可读性。例如,结合`ArrayList`使用泛型可避免类型转换错误;自定义泛型类如`ApiResponse<T>`可处理不同类型API响应;RecyclerView适配器利用泛型支持多种视图数据;Retrofit结合泛型定义响应模型,明确数据类型。然而,需注意类型擦除导致的信息丢失问题。合理使用泛型能显著提升代码质量和应用健壮性。
|
4天前
|
存储 XML 开发工具
探索安卓开发之旅:从新手到专家
在这篇文章中,我们将一起踏上一段激动人心的旅程,深入探索安卓开发的奥秘。无论你是刚刚起步的初学者,还是希望提升技能的中级开发者,亦或是渴望成为领域专家的资深人士,这里都有你需要的知识与技巧。通过浅显易懂的语言和逐步深入的内容安排,本文将带你了解安卓开发的核心概念、常用工具和最佳实践,助你构建稳固的知识基础,开启技术进阶之路。让我们开始吧!
|
4天前
|
XML 数据可视化 Android开发
Android应用界面
Android应用界面中的布局和控件使用,包括相对布局、线性布局、表格布局、帧布局、扁平化布局等,以及AdapterView及其子类如ListView的使用方法和Adapter接口的应用。
9 0
Android应用界面