# android移动开发期末大作业_营销号模拟器 **Repository Path**: zhao_xu_1/android ## Basic Information - **Project Name**: android移动开发期末大作业_营销号模拟器 - **Description**: 安卓移动开发课程的一个期末作业,做的是一个营销号模拟器。 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2020-06-21 - **Last Updated**: 2023-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] ## 前言 这个文章是我android移动开发课的一个总结。 搞这个就是跟室友觉得好玩。哈哈。 app的下载地址:[下载链接][1] [1]:http://www.wonderlandgate.com/%E8%90%A5%E9%94%80%E5%8F%B7%E6%A8%A1%E6%8B%9F%E5%99%A8.apk "下载链接" ## 一、 本学期学到的知识 ### 1. 关于Android开发的一个了解 其实这个是非常重要的,我以后不一定从事Android开发,但我知道了android是Google的基于Linux的操作系统。里面有Activity、Broadcast、Service、ContentProvider四个重要的组件。 ### 2. GUI设计的学习 布局方面包括Linear Layout,Relative Layout、TableLayout、GridLayout等等。 Widget控件方面。包括TextView、ImageView、EditView、Button。还有ListView和Adapter实现滑动查看多条信息。 Toast信息表示、Log输出信息。尤其是Log对我debug非常有用。 这是我第一次使用xml写一个图形化的界面,以前我也没有学习过前端方面的知识,但这种标签化的页面跟html挺像的让我了解了很多。 ### 3. Java的学习 其实我基础是比较薄弱的。因为我之前没有学习过java。上学期我们可以在java和c++中选一个。于是我上学期学的是c++。 于是这个学期,我在开始的时候花了很多的时间补了一下java的语法。尤其是继承、实现这些关键词。后来终于能够看懂课本和ppt上面的代码了。我觉得这门还是收获很大,不然我可能不会主动去学习java。 ### 4. Activity Activity其实还是比较抽象的,不过用了多了以后就慢慢能理解了。简单来说activity“活动”,是在Android应用中负责与用户交互的组件。 这个生命周期的图还是非常重要的。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/1067486217.png) 另外一个比较重要的就是Activity之间的调用。再最开始的实践中就是实现不同activity之间的跳转。 ### 5. Fragment Fragment是一种嵌入到Activity中使用的UI片段,用的也非常的多。记得第二个课程表中我就用了Fragment,再最后的大作业中更是用了很多的Fragment。 Fragment如下图所示。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/495856095.png) ### 6. 一种分层的思想 在这个课里面很多都是分层的。 比如MVC(model、view、control)非常明显,非常适合于分工协作。 另外还有Android操作系统、Activity、Fragment之间的层次。不能越级,每一个掌管着下一层的生命周期。 其实还有网络里面的分层通信。我们只需要考虑socket通信,至于网络层、传输层、物理层根本不需要我们考虑。 本来是一件非常负责的事情,现在已经分工完成,极大地方便了Android开发人员和其他人。 ### 7. 异步网络通信 这个我主要是照着书上敲代码,下载了网络上的一个图片,还是挺激动的。之前写的都是单机的程序,现在终于可以联网了。 ### 8. 组件通信Intent Intent可以与其他于其他应用程序进行交互。我在后面的时候就是通过Intent打开了本地的浏览器。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/3399053612.png) ### 9. 学习怎么快速找资料 我们最开始的时候都没有什么经验。很多问题都需要到网上去找答案。 其实Android课也不是教我们直接写代码,主要理解一些理解。 本来面对大片的代码就很难理解。不过通过上课讲解的那些概念并且不断地熟悉其实慢慢就能理解了。我记得后来面对一些问题,我虽然不会具体地解决方法,但我能很快的找到资料,并且改好。这个还是不错的。如果我练习更多的话就能成为熟练的开发人了。哈哈。 ## 二、在实践过程中遇到的问题与解决 其中在最后一次的大作业中。我是跟室友一起构思并写的代码。 其中我主要负责了以下内容: ### 1. 布局文件xml编写 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/459324335.png) 最终有这样一些xml文件。最主要的有如右图所示,分别是game_layout、help_layout,about_layout,这是三个主要的大类。然后在游戏界面的内部,又有营销、道具和传播三个子界面。我们遇到的一个问题就是协作的时候变量命名的问题。最终我们采用的是驼峰命名法,同时在单词之间加上下划线,单词的首字母大写,这样比较规范不会重复,并且一下就能认出变量的意思。另外还有互相代码看不懂的问题。这个主要是靠分工,每个人写自己的部分,然后多些一些注释。 我写完之后还给同学玩了一下,有的同学出现了页面显示不全的尺寸匹配错误,这个问题我主要是通过把xml里面的高度设置位0dp,然后通过weight值来调整大小。同时我在笔记本上装了两个手机模拟器,一大一小,这样我可以在写代码的时候就实时知道尺寸是否适合了。 ### 2. Fragment设置。 上图中营销、道具和传播是最大的三个Fragment,为了实现各个Fragment之间的切换,我们使用的是对button设置监听,并在click之后调用transaction.replace函数可以实现Fragment的切换。但是我设置的Fragment里面是ListView,所以不仅需要Fragment的xml,还需要填充的item的xml,这样可以实现上下滑动。 同时这个listview里面的内容我们希望是可以动态填充的,所以我使用的SimpleAdapter。然后把数据存进去就能够显示了。还是比较方便的。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/2990046538.png) 除此之外的一个问题是,我的Fragment里面的listView里面的item还需要调用其他的fragment。确实有点绕。如左图所示,我的看一篇营销号文章、看一个营销号视频、最后的真相都会跳转到一个新的Fragement页面。那怎么办呢?Fragment里面的item本身没有控制其他Fragement的能力,而只有Activity有这样的能力。于是我就使用了getActivity函数获得这个Fragment对应的activity,再使用transaction.replace成功实现fragment里面的item跳转到新的fragment。 ### 3. Fragment里面VideoPlay设置。添加播放本地视频的功能 在Fragment我们实现了视频的播放。这个视频的来历可以好好说一说。我们首先在github上面找到了一个营销号视频生成器,通过文本和视频素材,这个python写的生成器可以通过讯飞获得语音并且嵌入到视频中,于是我们就获得了一个营销号的视频。把它放到activity里面的raw文件夹中,那我们怎么在Fragment中实现?androidStudio里面也已经有videoview了,可以首先给videoview绑定视频的id,然后使用videoview.start()开始播放。我们还设置了一个timer来计时,必须要播放一段时间才可以获得奖励。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/1944327917.png) ### 4. 从网络上异步下载图片并解码。 其实这个图里面的那个海绵宝宝是从我的阿里云服务器上面下载下来的,然后经过解码并呈现出来。这里需要开启一个异步的任务,从指定的url处下载。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/4097163536.png) ### 5. 调用手机自带的浏览器打开指定网址 同时点击看一篇营销好文章会跳转到一个页面。这个页面也挺有意思的是一个能够自动生成营销号文案的网站。本来我是希望建立HTTP连接,post一个关键词上去返回一个html页面然后我再解析呈现出这个页面,但是实现起来比较麻烦,于是我就是用了自带浏览器的方式。 其实把,写android代码是一部分,但在这个过程中可以找到一些有意思的人和事,就比如这个自动生成营销号文案的网站是一个个人博客里面的一个页面,我觉得他这个做得就很有意思。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/3319548257.png) ### 6. 增加背景音乐的service。 这个其实很简单。我们一开始没想这么细节,不过后来想要加了就搜索了一下资料,然后发现要用到我们上课的时候讲到的service,然后再mainactivity里面播放就可以了。 ### 7. 游戏内容方面。包括最终结局、新闻描述设计。 这个部分其实是比较重要的。本来我们的游戏就是一直点点点,也不是这到底是为了什么,但是增加了一些游戏内容之后,一下就变得生动活泼了,更有人情味了。其实这些也是源于我跟室友对于科幻的热爱。就比如有图这个非常2的游戏结局。给我同学们玩的时候他们竟然觉得立意深刻哈哈。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/3719385592.png) 包括新闻我们了构思和写了很久,上图只是一部分。比如提高低等级生命智慧来向他们传播营销号。这个想法我觉得真的是绝了。 ### 8. 增加艺术字体。 渐渐的我们觉得字体非常的丑,但是网上的字体都需要付费,而且我也不知道怎么换。后来我发现有个叫做造字工厂的网站上面有很多优质的艺术字。对于个人用户来说很多都是免费的。下载之后是ttf文件,之后我们使用typeface来设置字体。我们的标题确实比之前好看了不少。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/528774066.png) ### 9. 编写新手教程。 本来我们也没有打算要写新手教程,但是有些同学不知道怎么玩。于是我们设置了新手教程的页面,加入了listview,放入了几个有解释的截图。 ![](http://www.wonderlandgate.com/usr/uploads/2020/06/1626591721.png) ## 三、 总结与展望 ### 收获 首先对我来说这门课的收获是很大的。 * 一方面,这门课我比较感兴趣。我是自己选的。相比于其他比较理论的课,这种实践的课能让我更好的理解课程内容,也更有成就感。我最后把app小游戏发给同学玩的时候还是挺自豪的。 * 另一方面,教学方式我也比较喜欢。老师的声音比较好听。讲课讲得不算多,但都是重点。正如我前文所说,这门课的代码那么多,如果直接讲听不明白,还不如自己实践中学习。 * 除此之外,这门课可以把我学的很多知识串起来,或者让我去了解更多的内容。比如计算机网络、比如让我从一个会C++的去学习java、了解MVC、更多的标签语言。 * 另外其实让我有一种不同的眼光看待app。之前都只是使用者,现在却可以成为制造者。 * 对我来说,其实还有一个很重要,记得就是我跟室友拿个草稿本到楼梯边坐在楼梯上讨论游戏各种想法和细节,对我来说算是美妙的回忆。我们俩都比较喜欢科幻,也比较中二。第一次能够实现自己的小游戏是挺激动的。所以我们经常搞到晚上一点还没感觉。哈哈。 ### 关于未来 * 对于未来的话,首先有一些比赛,我可以把我的想法用app程序的方式展现出来。另外,服务端的一些东西我也很想学习。记得班上有个同学用了SpringBoot写了服务端,然后实现了联机的五子棋程序。服务端我也想了解。 还有就是多线程。我们组在写代码的时候,线程一直搞不清楚。而我下学期还要学操作系统,应该就能理解了。 我觉得学Android挺好玩的。