第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 安卓游戏编程开发 如何开发一款手机软件 – 游戏开发 – 前端

安卓游戏编程开发 如何开发一款手机软件 – 游戏开发 – 前端

时间:2019-06-06 00:20:33

相关推荐

安卓游戏编程开发 如何开发一款手机软件 – 游戏开发 – 前端

在开始写正文之前,先来一波效果的展示,看看五天过后大家能实现怎样的效果

本次的教程分为 5 天,内容分别为:

Day one,准备

功能需求

可行性分析

Day two,UI 及公共类的封装

界面的设计及实现

公共类的实现

Day three,日记模块

日记的展示

悬浮菜单的实现

日记增删改的实现

Day four,妹子模块

图片的获取

图片的展示

详情页面的展示

Day five,段子模块

段子数据的获取

段子的显示

Day one

俗话说,万事开头难,在开始敲代码之前,先让大家来做一些必要的准备,这样才能事半功倍嘛!

一、功能需求

既然要做一个 APP,那大家首先还是得把 APP 的功能都列出来,有了方向才能更好的努力,因为偶想做的是一个专门给睡觉前用的 APP,所以偶觉得应该有以下的这些功能

1、日记的增删改

2、显示一些有趣好玩的段子

3、瀑布流展示漂亮的妹子

4、保存日记的内容以及缓存妹子图片

虽然说需求不多,但是却要运用到网络、数据存储、图片缓存、UI 设计等内容,相信整个 APP 完成下来,必定能巩固大家的 Android 基础。

二、可行性分析

大家这个 APP 主要有三个模块,日记模块主要是运用到了数据库的知识,难度不大。但是,段子模块和妹子模块的数据要从哪来,这便是要好好考虑的了。幸好现在是个开源的时代,很多的数据,网上已经开源出来了。

大家先来看一下数据的内容

上面那两段代码分别是段子和妹子模块的 json 类型的数据,偶已经将一些没用的字段去掉了。剩下的都是大家想要的数据。可以看到段子数据中,有着段子的内容,以及发布者的头像和名字。而妹子数据中有着图片的 url、id、以及图片的类型。相信有了这么丰富的数据,大家想要完成这个 APP 也是有底气了。

Day two

一、界面的设计及实现

既然大家想要完成一个好看的 APP,那么好看的界面便是必不可少的,这里偶强烈推荐 APP 界面的设计必须尽量遵从 Google 提出的 Material Design,在这个推荐一个能够让大家实现 Material Design 变得更加简单的网站 material design palette,偶这个 APP 的配色就是用这个网站完成的,贴几张图片,让你感受一下它的强大。

借助这个网站便能让大家完成 APP 的配色以及图标的收集,为下一步功能的实现,先打好了基础,至于界面的设计就仁者见仁智者见智了,篇幅有限,偶就不多讲了。

APP 的最终设计效果如下:

二、公共类的实现

因为这个项目有三个模块,有一些东西其实是可以通用的,如果大家先把这些能够通用的东西,封装起来,供给所有的模块调用的话,相信会大大提高大家的开发效率。

1、网络工具类的封装

这个 APP 中,很多地方都要用到网络请求,因此也就很有必要将网络请求封装起来,因为这个 APP 的规模比较小,因此偶选择了 Volley 这个网络框架作为大家网络请求库,把网络请求封装起来,哪个地方需要,调用一下就行了。对于网络请求,偶觉得每个程序员都该懂点 HTTP,这里附上一篇有关 HTTP 的文章程序员都该懂点 HTTP。

先让大家来写个将网络请求进行回调的接口

然后将网络请求封装起来

2、Json 解析的帮助类

因为大家这个 APP 中,获取到的数据都是 Json 格式的,因此也就有必要将有关的 Json 解析封装成一个工具类,传入一个 String 类型的数据,直接得到数据实体类的 List。

3、HomeActivity(主页面)的封装

主页面偶用的是 TabLayout + ViewPager + Fragment,也是现在主流 APP 主页面的显示方式。主界面底部是大家三个模块的图标和名称,通过左右滑动能实现界面的跳转。

底部图标的实体类 CommonTabBean

ViewPager + Fragment 通用的 Adapter

Day three

关于日记模块的实现,其实偶是复用了以前写过的一个日记 APP,具体的思路和做法,可以参考偶的这篇文章 Android 一款十分简洁、优雅的日记 APP

Day four

一、图片的获取

1、根据返回的数据来编写图片的实体类

2、图片的展示

可以看到偶是用瀑布流的方式来实现图片的展示,效果还不错,但其实实现起来也是很简单的

先写个图片的布局作为 RecyclerView 的 Item

可以看到偶在 ImageView 的外面加了一个 CardView,这个一种卡片式布局,能让图片看起来就像一张卡片一样,相当的优雅、美观。

接着编写 Adapter,将数据和界面进行绑定

最后在 Fragment 进行数据的获取,以及布局的初始化就行了

3、详情页面的展示

干巴巴的,整个模块只能显示妹子的图片怎么行呢!!!怎么着也得能查看大图,根据手势放大缩小,以及浏览下一张图片才行嘛,说干就干。

因为图片需要有根据手势来放大缩小的功能,因此偶便想到了 PhotoView,这是网上一个大神写的,继承自 ImageView 的一个自定义控件。图片加载偶用的是

Glide,如果没了解过这个库的,强烈推荐,一行代码就能搞定图片加载,你确定不研究一下。

Day five

一、段子数据的获取

段子数据的获取其实跟妹子模块的方法基本一样

先编写实体类

写好实体类之后,使用大家之前已经封装好的网络请求工具以及解析工具,便能将返回的数据,解析成一个包含段子实体类的 List。

二、段子的显示

老规矩,先写个 RecyclerView 的 Item

然后编写将数据和界面进行绑定的 Adapter

最后段子页面中进行数据和获取以及界面的初始化

王者荣耀用什么语言开发的?

开发王者荣耀主要用untiy3D游戏引擎,接口方面会用到c,c#还有java,原画,插画,3D建模,这些也会用到。如果你想从事游戏开发的工作偶建议你去学习一下3D游戏引擎。

想自学一下android开发?

android现在主流还是java开发,既然学会了java的话,上手android不难。

android主要是界面UI交互,xml布局。

需要准备一台真机、开发者IDE下载Androidstudio:

https://developer./

主要内容掌握四大组件:service服务、activity、广播接收器、内容提供者。

1.活动(activity)

(1)定义:Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当大家创建完毕Activity之后,需要调用方法来完成界面的显示;以此来为用户提供交互的入口。在Android App 中只要能看见的几乎都要依托于Activity,所以Activity是在开发中使用最频繁的一种组件。

(2)一个Activity通常就是一个单独的屏幕(窗口)。

(3)Activity之间通过Intent进行通信。

(4)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。在android stdio会自动生成,但eclipse需要自己手动添加

(5)Activity的生命周期在Android中会维持一个Activity Stack(Activity栈),当一个新的Activity创建时,它就会放到栈顶,这个Activity就处于运行状态。当再有一个新的Activity被创建后,会重新压人栈顶,而之前的Activity则会在这个新的Activity底下,就像枪梭压入子弹一样。而且之前的Activity就会进入后台。一个Activity实质上有四种状态:a.运行中(Running/Active):这时Activity位于栈顶,是可见的,并且可以用户交互。b.暂停(Paused):当Activity失去焦点,不能跟用户交互了,但依然可见,就处于暂停状态。当一个新的非全屏的Activity或者一个透明的Activity放置在栈顶,Activity就处于暂停状态;这个时候Activity的各种数据还被保持着;只有在系统内存在极低的状态下,系统才会自动的去销毁Activity。c.停止(Stoped):当一个Activity被另一个Activity完全覆盖,或者点击HOME键退入了后台,这时候Activity处于停止状态。这里有些是跟暂停状态相似的:这个时候Activity的各种数据还被保持着;当系统的别的地方需要用到内容时,系统会自动的去销毁Activity。d.销毁(Detroyed):当大家点击返回键或者系统在内存不够用的情况下就会把Activity从栈里移除销毁,被系统回收,这时候,Activity处于销毁状态。

2.服务(Service)

service(服务)是安卓中的四大组件之一,它通常用作在后台处理耗时的逻辑,与Activity一样,它存在自己的生命周期,也需要在AndroidManifest.xml配置相关信息。

服务(Service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。

不过需要注意的是,服务并不是运行在一个独立的进程当中的,而是依赖于创建服务时所在的应用程序进程。与某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止运行。另外.也不要被服务的后台概念所迷惑,实际上服务并不会自动开启线程,所有的代码都是默认运行在主线程当中的。也就是说,大家需要在服务的内部手动创建子线程,并在这里执行具体的任务,否则就有可能出现主线程被阻塞住的情况。

(1)service用于在后台完成用户指定的操作。service分为两种:(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。(2)startService()与bindService()区别:(a)started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。(b)使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。(3)开发人员需要在应用程序配置文件中声明全部的service,使用<service></service>标签。

(4)Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

定义

Service是一个专门在后台处理长时间任务的Android组件,它没有UI。它有两种启动方式,startService和bindService。

这两种启动方式的区别:

startService只是启动Service,启动它的组件(如Activity)和Service并没有关联,只有当Service调用stopSelf或者其他组件调用stopService服务才会终止。bindService方法启动Service,其他组件可以通过回调获取Service的代理对象和Service交互,而这两方也进行了绑定,当启动方销毁时,Service也会自动进行unBind操作,当发现所有绑定都进行了unBind时才会销毁Service。

Service的onCreate回调函数可以做耗时的操作吗?不可以,Service的onCreate是在主线程(ActivityThread)中调用的,耗时操作会阻塞UI如果需要做耗时的操作,你会怎么做?线程和Handler方式

是否知道IntentService,在什么场景下使用IntentService?

IntentService相比父类Service而言,最大特点是其回调函数onHandleIntent中可以直接进行耗时操作,不必再开线程。其原理是IntentService的成员变量 Handler在初始化时已属于工作线程,之后handleMessage,包括onHandleIntent等函数都运行在工作线程中。

如果对IntentService的了解仅限于此,会有种IntentService很鸡肋的观点,因为在Service中开线程进行耗时操作也不麻烦。偶当初也是这个观点,所以很少用IntentService。

但是IntentService还有一个特点,就是多次调用onHandleIntent函数(也就是有多个耗时任务要执行),多个耗时任务会按顺序依次执行。原理是其内置的Handler关联了任务队列,Handler通过looper取任务执行是顺序执行的。

这个特点就能解决多个耗时任务需要顺序依次执行的问题。而如果仅用service,开多个线程去执行耗时操作,就很难管理。

/zhengyin_tmac/article/details/524466963.广播接受者(Broadcast Receive)

在Android中,广播是一种广泛运用的在应用程序之间传输信息的机制。而广播接收器是对发送出来的广播进行过滤接受并响应的一类组件。可以使用广播接收器来让应用对一个外部时间做出响应。例如,当电话呼入这个外部事件到来时,可以利用广播接收器进行处理。当下载一个程序成功完成时,仍然可以利用广播接收器进行处理。广播接收器不NotificationManager来通知用户这些事情发生了。广播接收器既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceive进行注册。只要是注册了,当事件来临时,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用Context.sendBroadcast将它们自己的Intent广播给其他应用程序。

(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

(2)广播接收者的注册有两种方法,分别是程序动态注册(在运行时的代码中使用Context.registerReceive进行注册)和AndroidManifest文件中进行静态注册。

(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

4.内容提供者(Content Provider)

(1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。(2)只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。(4)开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。

(5)ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。