《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。
该类的主要作用是对加载的模型信息进行处理,形成顶点坐标缓冲和纹理坐标缓冲,并将相关的缓冲数据送入渲染管线,用于绘制。

相关文章
|
1月前
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
81 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
22天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
42 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
174 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
54 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
2月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
104 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
18天前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
43 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
84 19
|
3月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
106 14
|
3月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
189 3

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 4
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 5
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 7
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 9
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 10
    Android实战经验之Kotlin中快速实现MVI架构
  • 1
    android FragmentManager 删除所有Fragment 重建
    19
  • 2
    Android实战经验之Kotlin中快速实现MVI架构
    36
  • 3
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
    37
  • 4
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
    43
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    151
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    47
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    59
  • 8
    Android历史版本与APK文件结构
    165
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    49
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    42