Android毕业设计——基于Android+Tomcat的网络视频探索系统设计与实现(毕业论文+程序源码)——网络视频探索系统

基于Android+Tomcat的网络视频探索系统设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于Android+Tomcat的网络视频探索系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

1、项目简介

  1. 随着智能手机用户量的不断增加,以及各式各样的移动端APP不断出现在应用市场上,人们投入到移动端的时间也越来越多,移动端已经成为了生活中不可或缺的部分。迄今为止,基本上可以在移动端解决大部分生活中的需求,基于这样的趋势,为了更加丰富人们在移动端的生活色彩,开发一个网络视频探索系统,使用户可以简单、方便地查看周围以及各个区域的热门视频。

  2. 目前,百度糯米,美团等移动应用可以根据电影的名字或者电影院的名字来搜索相关信息,主要功能是提供用户视频评分,票房的信息,以及电影票和相关物品的售卖,不可以检索用户周围的电影院,更不能为用户规划路线。PC端也有一些网站同样可以检索视频信息以及相关排序,但无论是PC端还是移动端都几乎没有应用把地区作为量化单位来划分视频的热度。地区在一定程度上代表了该区大众的喜好。
    因此,本课题基于Android平台开发了一个网络视频探索系统,从用户对视频方面的需求的角度出发,收集并在移动端展示各个区域热门视频的相关信息,并将有可能是用户喜爱的视频简介推荐给用户,用户可以点击复制喜欢的电影名字,到相关应用购买电影票或者检索详细的信息比如迅雷下载地址。提供开关按钮使用户可以根据自己喜好选择是否打开视频热力图,提供交通拥堵热力图以及附近的电影院地址,当用户选择某个电影院时为该用户规划到达路线。

  3. 设计比较友好的交互界面,比如使用侧边栏的形式显示功能界面,设计并开发显示动画,界面之间的跳转动画,按钮的点击效果等一些人性化的交互方式,开发一个真正应用级别而不是展示级别的Android软件。


2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:20034个字38页
包含内容:全套源码+配整论文
开题报告、论文答辩、课题报告等ppt模板推荐下载方式:
在这里插入图片描述


3、关键词

视频热力图;Android应用;视频推荐;路径规划

4、毕设简介

提示:以下为毕业论文的简略介绍,项目完整源码及完整毕业论文下载地址见文末。

1 引言
1.1 研究背景
智能手机用户在2015年占全球人数比例超过百分之十,在2016年的时候手机用户超过20亿,中国占百分之三十左右。现如今,全球的智能手机用户数量还在不断的增长,人们投入到移动端的时间也越来越多,同时,各种移动端应用无论是Android还是IOS都在飞速发展,以满足人们在智能手机上的各种需求。

1.2 研究意义
目前,百度糯米,美团等移动应用可以根据电影的名字或者电影院的名字来搜索相关信息,主要功能是提供用户视频评分,票房的信息,以及电影票和相关物品的售卖,不可以检索用户周围的电影院,更不能为用户规划路线。PC端也有一些网站同样可以检索视频信息以及相关排序,但无论是PC端还是移动端都几乎没有应用把地区作为量化单位来划分视频的热度。地区在一定程度上代表了该区大众的喜好。

1.2.1 视频探索开源系统
系统主要为Android应用,也包含简易的Tomcat服务器为APP提供数据,该系统将热门视频以热力图,图片,简介等形式进行可视化呈现,提供用户视频推荐,以及比较人性化的交互界面。提供新版本检测、新手引导、地图模式的切换、菜单栏滑动动画效果、交通热力图以及视频热力图的开关、直接打开百度糯米、检索附近电影院以及为用户规划到达路线等功能。系统不搜集任何用户信息,在GitHub上开源所有代码以及相关Commit日志。所有开发者均可以免费download或者fork代码进一步开发和优化。

1.2.2 Tomcat服务器
Tomcat服务器最大的优点就是免费,使用Tomcat,在经过相关配置后可以把自己的电脑当做是一台服务器,手机可以通过同一个网络从电脑上获取到数据,因此,本系统使用Tomcat服务器作为数据的存储站点,保存移动端需要的相关数据。

1.2.3 移动用户
随着智能手机的普及,如今移动用户的队伍是越来越庞大,下到八九岁,上到五六十岁,均有大量的移动端用户,如此庞大的用户自然也推动着各种移动应用的发展,目前为止大多数人们出门已经不再携带现金而是用支付宝或微信等应用替代现金支付,简单快捷还不用找零,多年前出门需要带地图,需要不断找路人问路,而如今直接导航变能省去这些乱七八糟的事情。移动用户的群体会越来越庞大,对移动端各种需求也会越来越高。
因此,本视频探索开源系统在视频方面对移动端用户在娱乐方面的生活增添一些色彩,以区域为单位展示出各个区域的热门视频,提供用户视频推荐,附近影院搜索以及路线规划等功能。

1.2.4 Android平台
如今移动端的操作系统市场上基本就是Android和IOS,Android平台是如今移动端市场占据最大的平台,由于系统开源,很对手机产商基于Android系统定制了自己的手机操作系统。Android系统的开放性好,可定制性高,开发者基于面向对象语言Java编写,可以快速开发,正是由于这些特性,Android手机的成本无论是硬件还是软件都比IOS小很多,所以Android受到了广大民众的喜爱,占据了很大一部分移动端的用户。

而IOS应用的开发,使用Objective-C语言编写,并且只有MAC系统可以开发IOS应用,同时IOS开发者账号每年差不多需要一千块钱,诸多原因造成IOS应用的成本很高,因此使用iPhone的移动端用户一般都是比较有钱的人。
因此,考虑成本等因素,本系统的移动端基于Android系统开发,

1.3 研究现状
移动终端的功能在不断多样化。现如今,基本上可以在智能手机上解决大多数生活中的需求。基于这样的趋势,为了方便移动端用户有关热门网络视频的一些需求,本课题将基于Android平台开发一个网络视频探索系统,为用户提供简单、便捷的功能,查看各个区域内热门的视频,以新颖的方式(如百度地图、热力图)来展示各个地区热门视频,帮助用户发现当前最新最火的视频信息。
目前,百度糯米,美团等移动应用可以根据电影的名字或者电影院的名字来搜索相关信息,PC端也有一些网站同样可以对检索视频信息以及相关排序,却几乎没有应用是以地区来划分视频热度的,因此,本课题将以区域为条件显示热门视频,将可能是用户感兴趣的视频显示并推荐给该用户。

1.4 研究目标
本系统从用户对视频方面的需求的角度出发,收集并在移动端展示出用户各个区域热门视频的相关信息,并将有可能是用户喜爱的视频简介推荐给用户,用户可以点击复制喜欢的电影名字,到相关应用购买电影票或者检索详细的信息比如迅雷下载地址。
提供开关按钮使用户可以根据自己喜好选择是否打开视频热力图,提供交通拥堵热力图以及附近的电影院地址,当用户选择某个电影院时为该用户规划到达路线。
设计比较友好的交互界面,比如使用侧边栏的形式显示功能按钮,设计并开发部分切换动画,界面之间的跳转动画,按钮的点击效果等一些人性化的交互方式,开发一个真正应用级别而不是展示级别的Android软件。

2 系统架构
架构是一个系统或者应用的骨架,架构设计的好能够大大简化细节部分的实现,同样,如果架构设计不够灵活的话,无论是开发或者是将来的维护都会造成一定的困难。
2.1 视频探索系统架构
系统使用Client/Server架构(如图2-1示)。
此视频探索系统包含两个平台,一个是Android平台下的APP(热门视频),另一个是使用Tomcat搭建的服务器为APP提供数据。
APP主要负责视频数据“可视化”的呈现,将热门视频在地图上通过热力图的形式根据区域呈现给用户,点击地图模式可从上方滑出地图模式选择界面,用户可以选择标准地图、夜间地图、卫星模式以及导航模式四个不同模式的地图。点击菜单可从右侧弹出菜单侧边栏,提供交通热力图,视频热力的图开关,以及目前最热门的视频列表。用户点击定位按钮可将地图界面移动到用户所在位置,定位完成后将该区域热门视频推荐给用户,用户可点击按钮复制视频名字,也可以同时打开百度糯米。
APP地图主界面上提供搜索附近电影院的按钮,点击后检索附近影院同时标注给用户,点击后弹出步行,驾车,公交三种模式的选择,当用户选择后为用户规划到达路线。
服务器端使用Tomcat在个人电脑上创建,为手机提供热门视频数据,使用Json格式作为服务端和客户端之间的数据接口。
在这里插入图片描述

图2-1 系统架构
2.2 移动端APP架构
APP的架构图如图2-2所示。每一个Activity为一个界面,每个界面对应一个以小写的activity为前缀Layout布局,adapter为适配器模式为每个比较复杂的组件提供数据控制功能,data为封装的数据Bean,主要封装网络请求的数据,overlay为覆盖物,utils为工具包,提供数值转换以及数据保存等功能,view包里面为在官方提供的组件上新增扩展功能的自定义view,Layout为布局文件。
在这里插入图片描述

图2-2 APP架构

3 APP设计
本章介绍基于Android平台的移动端APP设计,包括和用户交互的主界面,菜单,数据接口,界面之间的跳转模式,组件出现动画等相关功能。
3.1 闪屏页
打开应用,闪屏页根据APP自身版本号和服务端最新版本号做对比检查版本是否有更新,如果有新版本就弹窗提示用户是否进行下载,否则如果是第一次打开APP检查完则进入引导页面,引导用户软件的基本使用方式,否则进入软件主页面。
3.2 主界面
主界面是指整个应用最主要的功能模块,用户绝大多数时间会停留在主界面,其余界面为功能扩充模块。
主界面涵盖了此应用绝大多数的功能,例如地图的展示,定位,连续定位,地图模式的切换,菜单,热力图显示,视频推荐,点击视频展示视频简介,检索用户所在位置附近影院以及当用户选择电影院时为其规划路线等。
3.2.1 展示地图
地图是整个系统的核心,整个APP所有功能都是基于主界面中的地图进行实现以及扩展的。
接入高德地图提供的开源SDK,根据开发者使用手册使用该SDK,导入SDK依赖的库文件(.so文件),配置清单文件,然后布局中引入以及显示地图。
设置地图的初始化状态,比如是否可以移动、旋转、缩放、指南针、点击事件等功能以及定位按钮、缩放按钮等图标的显示状态。
3.2.2 定位以及连续定位
主界面上左下角显示定位按钮,用户来到主界面时默认地图中心点为北京,当用户第一次点击定位按钮时,将地图中心点移动到用户所在的位置,地图缩放到17级并显示定位蓝点,定位图标文字由“定位”修改为“当前位置”。当用户第二次点击定位按钮时,地图缩放到19级(最大级)同时开启连续定位模式,蓝点随用户的移动而移动,定位图标文字由“当前位置”修改为“连续定位”。当用户再次点击定位按钮时,重复以上两个动作。
3.2.3 地图模式切换
地图模式分为:标准地图、夜间模式,卫星模式以及导航模式。
点击主界面上“地图模式”按钮,从上方往下滑出地图模式选择界面,同时未遮盖住的地方添加半透明遮罩。默认选中标准地图,提供四种模式的地图供用户选择,当选中某种模式时,该模式对应的按钮图片由黑白变为彩色,同时地图切换到选中的模式,点击半透明背景后收起该界面。
3.2.4 菜单栏
主界面上提供“菜单”按钮,菜单中提供用户交通热力图、视频热力图的开关以及目前最新最热门的视频列表。
点击菜单按钮,从手机右边往左滑出菜单界面,同时添加半透明遮罩,单用户打开热力图开关时在地图上显示相应的热力图,开关下方展示目前最热门的视频数据,数据从服务端拉取。当用户点击半透明遮罩时收起菜单界面。
3.2.5 热力图显示
热力图分交通热力图和视频热力图,由菜单界面控制热力图的显示和隐藏。
当用户打开交通热力图时,在地图的每一条街道上显示出当前的交通情况,比如拥堵路段便用红色显示,方便用户查看当时的交通状况。当用户打开视频热力图的时候,在地图上按区域显示各个区域的热门视频,比如以北京为例子,拿到北京热门的几部电影,将点击量最大也就是最热门的电影筛选出来,根据点击量判断该区域该显示的颜色。
3.2.6 视频推荐
视频推荐是指将用户所在区域的热门视频弹窗推荐给用户。
当用户点击定位时,获取到用户所在区域的热门视频,然后以弹窗的形式将视频简介推荐给用户。
3.2.7 视频简介
视频简介是以对话框的形式呈现给用户,包含视频相关图片,简介等信息。
当用户完成定位或者点击某个区域的视频图标时,弹出视频简介对话框,标题为视频名称,内容为视频的相关图片,信息等。内容下方提供两个按钮,一个为复制视频名字,另一个为复制视频名字并跳转百度糯米。
3.2.8 附近影院
附近影院是以用户所在位置为圆心,检索周围五千米以内的电影院。
主界面上提供检索附近影院的按钮,当用户点击后,把用户周围搜索出的前十个最近的电影院在地图上使用较大的红色图标标出来,剩余的使用比较小的蓝色的图标标注出来,同时将地图缩放级别调整到最大级。
3.2.9 路线规划
路径规划是以用户所在位置为起点,用户选择的电影院为终点,以用户所选方式为用户规划到达路线。
当用户点击任何一个影院的图标时,在图标上方展示影院名称以及地址,同时手机上方往下弹出到达方式选择界面,提供用户步行、公交、驾车三种到达方式的选择,用户选择某一种方式后,即为用户以该方式规划到达路线。

3.3 路线详情
详情页是指当用户选择到达方式后为用户规划的路线详情,分主界面简介和详情页的路线详情。
3.3.1 步行详情
当用户选择步行时,主界面下方显示步行简介,主要内容为需要多少分钟,多少公里,点击此界面跳转到步行详情页。
步行详情页使用列表形式列出步行的过程,包括每个路段需要行走的距离,方向等详细信息,顶部提供放回按钮,使用户可以退出这个界面。
3.3.2 公交详情
当用户选择公交时,将公交按钮置为彩色图标,同时在主界面以列表形式列出每个可行的乘车方案,将地图隐藏,改用半透明遮罩填充方案未覆盖到的区域。
每个乘车方案中列出需乘坐第几路公交,如果有转车列出,公交下方显示出距离,所需时间以及需要步行多少米。
点击某一个乘车方案后跳转到公交详情页,详情页以列表形式列出公交公交方案的步骤,公交部分默认折叠,当用户点击后展示每一个经过的站点。
3.3.3 驾车详情
当用户选择驾车方案时,为用户规划驾车路线,并在主界面下方显示所需时间以及距离,同时显示打车需要的费用。
点击主界面下方的简介后跳转到驾车路线详情页,同样以列表形式列出每个路段需要行驶的距离和方向。

4 服务器端设计
服务端的地位是相当重要的,只要客户端想要连接互联网交换数据,就需要有服务端的支持,本系统只是使用了服务端非常小的一个功能:为客户端提供数据。
4.1 Tomcat服务器
Tomcat是一个轻量级的服务器,最重要的一点是,它是开源的系统,任何开发者均可免费使用。
在Windows下安装Tomcat客户端,是电脑与手机连上同一个网络,配置完毕后手机可以通过电脑的IP地址访问电脑放在Tomcat下的资源。
4.2 Json数据
Android客户端主流识别的数据为Json和Xml格式的文件,在这里,我便使用最常用的Json格式。
Json格式文件主要是以Key-Value的形式保存数据,一个最简单的Json文件格式是这样的:{“key”: “value”}。Android客户端通过遍历key的形式找到对应的key,然后从key中取出对应的value。
4.3 开源库Gson
Java对Json数据的解析提供了很多的工具类比如Jackson,Fastjson等,在Android客户端中,最常用到的就是Google提供的开源库Gson,当然,如果数据并不复杂比如就是几个简单的key-value,没有涉及到多层嵌套以及多层List等复杂数据结构,则直接使用JsonObject和JsonArray两个类便可完成数据的解析。Gson需要封装数据结构,使用Gson对于这种情况来说就有些大材小用了。

5 APP实现
本章主要介绍Android平台下的编码过程和技术要点。
本系统APP使用Android Studio做为开发IDE,所有代码通过Git进行版本控制,并将代码托管到GitHub仓库进行管理。
Java是一种面向对象的计算机语言,Android使用Java和Android SDK进行开发。本系统APP采用MVC模式作为系统架构。
5.1 配置开发环境
开发环境是进行开发的首要工作,整个开发环境主要包括Android Studio,SDK,JDK以及模拟器。
除此之外还有版本控制工具,服务器环境等。
5.1.1 Android Studio
Android Studio是Google官方的IDE,相对于Eclipse在Android开发方面有着极大的优势,具体表现在代码补全功能、模拟器、界面、启动速度等方面都远远强于Eclipse。
Eclipse优点在于范围广,只需要添加对应插件便可进行各个语言的开发,比如开发Android只需要装在ADT插件,同样Java以及Python也是在Eclipse上装上插件便可以进行开发,缺点就是速度慢,广而不精。而Android Studio便解决了这一问题,Android Studio专注于Android开发,可扩展性不强,但是开发Android是别的IDE不可比拟的。
同时,由于Google长期以来都是基于Eclipse开发,刚发布Android Studio时需要Eclipse主动输出一个Gradle文件来配合Android Studio,但即便如此也会引起从Eclipse迁移到Android Studio的各种问题,后来Studio发布2.0版本后,便已经完全支持Eclipse项目,同时,Eclipse也声明即将不支持Android开发,请所有Android项目尽早迁移到Android Studio中。
5.1.2 Android SDK
SDK的全称是Software Development Kit,想要开发一个Android应用,IDE只是开发工具,SDK提供了开发包,里面包含了源码、文档以及一些小功能简单的例子等等。SDK是Android接触的最直接的东西,它也就是平时我们调用的各种系统API。
安装完Android Studio后,Studio本身便带有SDK的下载界面,本应用采用的是API23也就是Android 6.0系统的SDK进行开发。6.0相对于以前的版本最大的区别就是对权限的控制,6.0以前访问部分手机数据只需要在清单文件中静态申请权限即可,这些权限会在用户安装应用时告知用户。6.0以后,访问手机SD卡,相册等等便需要动态申请权限,清单文件中静态申请的权限无效。SDK界面如图5-1所示。
在这里插入图片描述

图5-1 Android SDK在Studio中的下载界面
5.1.3 JDK1.8
JDK是Java Development Kit的缩写,也就是Java开发工具包,因为Android应用是基于Java语言编写的,因此必须安装JDK工具包,在Windows上,安装JDK后,需要配置环境变量,在系统的高级设置里面找到环境变量并新增一个名为JAVA_HOME的环境变量,指向JDK的安装目录。
如果使用Eclipse开发,还需要配置ADT的环境变量,指向SDK安装目录,目的是将ADB命令添加到系统命令中。
如果是MAC系统,则装好Studio就可以了,其余事情都在Studio中完成了,本课题是基于MAC系统下的Android Studio开发的。
5.1.4 ADB命令
ADB的全称是Android Debug Bridge,中文名叫安卓调试桥,顾名思义,ADB是用来连接电脑和手机的。ADB最常用的功能是为手机装载APP、卸载APP,输出Log日志,查看连接上的设备等等。
同样,如果是Windows系统的话,手机连接上电脑需要装驱动,这是个很麻烦的操作可以由手机助手完成,一般打开比如360手机助手、豌豆荚等等这些手机助手时便会给手机装上驱动。同时,这也会产生一个更大的麻烦,就是每次连接上手机便会自动运行手机助手,此时因为ADB端口被手机助手占用,就导致了Eclipse或者Studio无法连接上手机。
因此,如果当调试程序时,一直报端口5037被占中,那么十有八九就是ADB端口被手机助手之类的软件占用了,唯一解决办法就是查看任务管理器,然后把疑似手机助手的软件结束任务。当然,MAC下不存在这些问题。
5.1.5 模拟器
当下载某一个版本的SDK时(本应用使用的为6.0)可同时勾选模拟器栏目,模拟器主要分x86系统和arm系统,由于市面上真机基本都是arm系统,因此开发时若需要使用模拟器则应该选择arm系统。
5.1.6 Git工具
版本控制指的是通过记录一个文件每一次的修改内容,以便于查看各个版本的内容变化,如今最流行的两款VCS(版本控制系统)工具便是Git和SVN,由于SVN的速度太慢,与远程服务器实时连接,因此目前最流行的VCS工具便是Git,Git的功能确实极其强大。当然,也有很多历史比较悠久的项目,想百度贴吧,等等一些“上了年份”的项目由于迁移代价太大,因此仍然使用SVN作为项目的版本管理工具。
5.1.7 GitHub
GitHub是目前最流行的代码托管平台,就相当于一个免费的远程服务器,通过Git关联GitHub仓库后便可将用户文件push到GitHub仓库。如今,GitHub已经收录了无数的开源代码,各行各业的开源库,功能的项目几乎都是选择托管到GitHub中,别的开发者可以免费download或者fork,以供交流学习。
本应用同样将所有代码托管到GitHub中,每次完善一个功能便会更新代码到GitHub,可供所有人下载交流。

5.2 Android系统
Android系统是一个移动操作系统,如今大部分手机系统比如小米,华为等均是根据Google开源的Android系统定制的自己系统。Android系统的架构如图5-2所示。
在这里插入图片描述

图5-2 Android系统架构
5.2.1 Linux层
Linux层是Android系统最底层最核心的部分,这一层包含了Android系统与硬件的直接交互的接口、安全系统、进程管理、硬件驱动等等。打开手机的设置,然后查看关于手机便可以看到这个手机系统使用的Linux版本。
5.2.2 Dalvik和ART
Dalvik是指Android运行环境的虚拟机,每一个应用都会分配一个Dalvik进程,而每个Dalvik进程都是一个Linux进程,因此能保证每个APP之间相互独立出来不受其他APP干扰。
Dalvik虚拟机采用运行时编译代码,而从Android5.0开始,Android系统开始采用ART虚拟机,ART虚拟机的好处是安装时编译代码,因此可以提升APP运行速度,缺点是这样会是ART的安装包比Dalvik的大,但如今手机的储存大小已经能达到几十个GB,也就不考虑这点大小了。
5.2.3 Libraries和Runtime 层
Android系统提供一些C语言以及C++语言的系统类库,这些类库通过Android的Framework供各个组件调用。轻量级的数据库SQLite、2D图形引擎SGL以及一些媒体库都在这一层。
5.2.4 Framework层
Framework层也叫程序框架层,也就是开发Android程序时使用的系统API,提供几乎所有需要的功能,主要由Android四大组件:Activity,Service,Content Provider,
Broadcast Receiver组成。
其中Activity也就是APP的界面,Service是服务,通常用于需要再后台活动的任务,Content Provider负责数据交换,一般是APP内部的交换,也可以和其他APP互通数据,Broadcast Receiver负责广播的注册和接收,一般用于监听工作比如监听手机开机、锁屏等等。
5.2.5 Application层
应用层也就是我们打开手机看到的内容,比如日历,短信,电话,计算器等应用便是这一层的内容,当开发好一个软件安装后也会出现在这里。
5.3 应用编码
本小节介绍此应用的整个编码过程和技术要点。
使用小米note真机作为开发和调试,MAC下的Android Studio作为开发软件的IDE,整个项目的结构如图5-3所示。
在这里插入图片描述

图5-3 项目结构
5.3.1 闪屏页
闪屏页几乎存在在每一个移动端的应用软件中,这个页面起到缓冲作用,在显示闪屏页的时候,其实是在做一些数据的处理,比如网络数据的获取,系统信息的拉取与配置,以及用户的校验等等。
有的应用像微信就没有闪屏页,但其实细心的话用户就可以发现,当点击启动微信时,会在桌面停留几百毫秒,然后直接打开微信界面,其实这几百毫秒也就是微信在做数据的处理,并且在用户点击图标的时候软件就已经打开了,只不过它使用透明的Activity作为闪屏页Activity,因此用户看到的仍然是桌面,这也就是技术上称的“冷启动”。
本系统的Android端应用闪屏页仅仅是校验服务端是否有新版本更新以及检查本地数据判断用户是否为第一次打开软件。如果有版本更新变弹出是否升级对话框,否则检查是否为第一次启动,如果是第一次启动则跳转到新手引导页,否则则跳转到软件的主界面MainActivity。
5.3.1.1 检查失败
在子线程中进行检查工作,如果发生意外导致检查更新的操作失败,比如网络错误,服务器异常等原因,便弹出Toast对话框提醒用户失败的原因。
当检测到手机没有网络是弹4001没有网络,如果服务器返回的错误码是404也就代表资源部存在则弹404资源找不到,如果服务器中json数据格式有问题则弹4003json格式错误。弹出失败原因后,放弃校验版本直接进入主界面。
5.3.1.2 下载进度条
当检测到有新版本时,弹出是否更新对话框,当用户点击更新apk按钮便开始下载新版的apk文件,此时如果发现sdcard下面已经存在graduation.apk文件则先删除此文件,然后开始将服务器上的graduation.apk安装包下载到sdcard,此时使用XUtils下的HttpUtils工具类进行下载,对比已下载大小和总大小,将下载进度条显示在手机屏幕上。
无论下载成功或者失败均隐藏下载进度条,如果失败则直接跳转到主界面,如果成功则调用系统API开始安装新的apk文件。
5.3.1.3 动画
当用户打开应用时为闪屏页添加动画效果,Android有两种动画分别是Tween动画和Frame动画,其中Tween动画则是通过对view的渐变,缩放和旋转达到动画效果,Frame动画则是按顺序播放几张叠加在一起的图片达到动画效果。
闪屏页使用的Tween动画,为根布局添加旋转,缩放和渐变的动画集合,进入闪屏页时按播放动画集合。其中旋转动画RotateAnimation为以布局中点为锚点,顺时针转动一圈,缩放动画ScaleAnimation为以布局中点为锚点,由0放大到1,也就是界面从无放大到全屏,渐变动画AlphaAnimation从完全透明到完全不透明。
因此,当用户打开闪屏页时,闪屏页的出现方式为旋转,缩放和渐变三种动画同时播放。
5.3.2 新手引导
新手引导页基本上也就每个软件必备的界面,为了方便第一次使用的用户知道该软件能做什么以及怎么做,一般会在新手引导页中将操作步骤列出。
本软件在热力图、地图模式、电影院的搜索以及导航四个方面的操作在新手引导页进行了详细的介绍,页面没有上一页和下一页按钮,只可以通过手势滑动,当滑到最后一张时,在界面圆点上方显示开始体验按钮。
其中每个页面的切换使用ViewPager实现,因为页面的数量比较小并且新手引导页只展示一次,因此并未进行性能的优化,正常来讲应该是当前内存中仅仅保留当前页,上一页以及下一页三个页面,当到第四个页面是应该重用第一个页面,但由于此软件新手引导页数目小,所以并未使用ViewPager的懒加载。
当使用手势滑动时,页面上表示当前页面是第几页的红点会跟随手指的移动而移动,此技术要点是重写ViewPager的onTouchEvent事件,监听到手势滑动时,将滑动的距离作为红点移动的距离,实时重新绘制红点即可。
此界面的ViewPager页面个数并不写死,使用动态添加页面的方式添加每一个新手引导页以及圆点,这样将来维护代码时无论是增加页面还是减少页面都比较容易操作。
5.3.3 主界面
主界面是每个应用实现核心功能的界面,本软件几乎所有的功能均是在主界面完成和呈现的。
5.3.3.1 高德地图SDK
高德地图SDK是整个地图功能的基础,只有使用地图SDK才能使用地图的一系列功能,接入高德地图SDK前需要先注册成为高德地图的开发者,创建应用以及配置调试版和发布版使用的key的SHA1值。配置完成的最终效果如图5-4所示。
配置完后获取到高德地图开发者的key值,将此值以及相关权限配置到项目的AndroidManifest中,将SDK的jar包以及so文件考到项目lib目录下,最后在build.gradle中引入lib下的库文件,至此,整个地图的环境便配置完毕。
其中高德地图SDK为开发者提供了丰富的可使用的功能模块,包括显示地图,修改定位icon,定位范围背景色,手势交互,控件交互等一系列可扩展性的功能,其中3D地图还包括室内地图,离线地图等功能,采用的数据模式为矢量数据,这种模式的数据效果好,官方维护也频繁,而2D地图采用的是栅格数据。本应用采用的是3D地图。
在这里插入图片描述

图5-4 配置高德地图开发者账号
5.3.3.2 显示地图
每一个Activity均对应一个layout布局文件,在主界面MainActivity对应的layout文件中,采用相对布局RelativeLayout作为界面的根布局,RelativeLayout布局特点是控件之间可以相互重叠,新添加的控件覆盖在界面图层的最上方,控件之间使用“相对于某个控件的位置”来确定自己的位置。
将高德地图提供的自定义View组件MapView作为第一个控件添加到RelativeLayout布局中,并使此地图控件占据这个屏幕,去除系统Activity自带样式的TitleBar,此时运行项目,地图占据在整个屏幕上。
由于地图控件MapView是一个相当消耗性能的view,因此在Activity中的每一个生命周期中均需要执行对应的操作,比如当Activity调用onDestroy时,也要调用MapView的onDestroy方法。Activity的生命周期如图5-5所示。
其中,有关Activity生命周期的介绍如下:“1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。”。
在这里插入图片描述

图5-5 Activity的生命周期
5.3.3.3 地图模式
在主界面右上角添加一个Button,Button文案设置为“地图模式”,提供给用户选择使用不同的地图,当用户点击此Button时,从手机上方向下滑出地图模式的选择界面,滑出的过程中带有动画效果,设置时间为300ms,动画效果为先减速然后加速。
在主界面上添加地图模式的选择界面layout,使用线性布局LinearLayout按权重分配四个模式的地图按钮,默认选中第一个标准地图,将选中的地图模式置为彩色,其它三个置为黑白。在MainActivity中初始化content时,将此layout在竖直方向上移动-100dp,保证此界面初始化后移出到手机外。
当用户点击地图模式时,将此layout从-100dp移动到0dp,使此界面出现在手机屏幕内,同时将其余地方添加半透明的遮罩,当点击遮罩时,再次把layout移动到手机屏幕外,达到点击按钮显示切换地图模式界面的动画效果。
当选择某一地图模式时,将MainActivity中的MapView置为对应的模式,并且刷新主界面上的地图,让用户可以实时看到选择的地图模式对应的地图样式。此功能效果图如图5-6所示。
在这里插入图片描述

图5-6 地图模式
5.3.3.4 定位图标和定位范围
在地图的左下角添加一个TextView作为定位按钮,初始Text为定位,当用户点击第一次的时候,将Text改为当前位置,在当前和位置之间加转义符号/n,这样可以让位置两字显示在当前的下面,/n在Android中代表换行的意思。同时,将地图缩放到17级别,并将视图移动到用户所在位置。当用户点击第二次时,将标志常量置为2,代表这是用户第二次点击,将文字修改为连续定位并且将地图缩放到最大级别19级。标志位默认为0,点击第一次置为1,第二次置为2,然后在1和2之间重复,地图根据标志位的值来判断该如何展示。
定位图标默认为蓝色的小箭头,定位范围也为透明值比较小的蓝色,这样的效果极其不美观,蓝色太深几乎都把建筑物以及建筑物名字的颜色全给盖住了。为此,参照百度地图并且查阅高德地图官方API文档将颜色值修改为2036a9ae,其中20的Alpha值能保证用户可以清晰的看到建筑物以及建筑物的名字。效果如图5-7所示。
在这里插入图片描述

图5-7 定位蓝点以及定位范围
5.3.3.5 视频推荐
当用户两次点击定位按钮后,获取到用户所在的经纬度然后根据此位置将这个区域内的热门视频推荐给用户。
最大定位级别定位成功后,弹出一个对话框将此区域的最热门的视频推荐给用户,对话框以视频名字作为标题,简介作为内容,在对话框的下方添加两个按钮,一个为复制视频名字,当用户点击时复制电影名字到剪切板。另一个按钮是复制名字并且跳转到百度糯米,当用户点击后复制视频名字并且打开百度糯米应用。
剪切板是Android系统自带的组件,当点击按钮时将内容写入剪切板里面,剪切板在整个手机里面均可使用,也就是当我打开其它应用时,也能获取到剪切板上的内容,剪切板也是Android的各个应用之间共享基本数据的一个比较常用的方式。
5.3.3.6 菜单栏
在主界面的右上角提供菜单按钮,当用户点击菜单按钮时,从手机右边往左滑出菜单界面,实现方式和地图模式一样,也是通过平移layout实现,也同样带有相同的效果,比如先加速后减速,300ms完成动作,为覆盖的地方添加遮罩,点击遮罩收起layout等。具体实现便不再重复,可以参照地图模式layout的实现方式。
菜单栏中包含交通热力图和视频热力图的开关,开关使用自定义的ImageView实现,命名为SwitchImageView,相对于系统自带的ImageView来讲,自定义的SwitchImageView仅仅是多了一个打开和未打开的boolean型标志位,使用时,当通过此标志位判断用户点击后的状态为打开时加载亮图,当判断为关闭的时候加载暗图。
同时,因为菜单栏并未完全遮盖住主界面中的地图,所以当用户点击热力图开关时,实时在地图上显示对应效果。
在两个热力图开关的下方,显示20个目前最热门的视频名字以及对应评分,数据由服务端获取,界面使用ListView实现。ListView是一个工具类,里面封装了一些使用重用以及ViewHolder类优化性能的代码。ListView使用Adapter适配器模式将数据和View分离开来,同一交由适配器Adapter处理,这也正好符合Android的MVC架构模式。MVC分别是数据Model,视图View以及控制器Control,将数据和视图分离开来,当数据变化时通知Control,然后Control再通知View进行重新绘制,这样可以保证代码的简洁易读,降低代码之间的耦合度。菜单栏效果如图5-8所示。
在这里插入图片描述

图5-8 菜单栏
5.3.3.7 附近影院
在地图的右上角提供搜索附近影院的按钮,当用户点击此按钮时,检索用户位置周边的5千米内的的电影院并用图标标注出来,检索到的电影院根据距离用户位置的大小来排序,距离用户近的排在前面。
使用比较大的红色标注icon将前十个影院标注出来,其余的使用比较小的蓝色的icon标注,所有icon均注册点击事件,当监听到用户点击时,如果是前十个则将被点击的icon置为比较大的蓝色图标,并且在图标上方显示该影院的名称,同时类似于菜单栏或者地图模式选择界面的方式弹出到达方式的选择界面。如果不是前十个则被点击的icon从小的蓝色图标改变为大的蓝色图标,其他逻辑一致。点击附近影院按钮的笑过去如图5-9所示。
在这里插入图片描述

图5-9 点击附近影院按钮
5.3.3.8 选择到达方式
当用户点击某一个影院的icon时,不仅将该icon换为比较大的蓝色图标,并且在图标色上方显示影院的名字和详细地址,同时还在手机上方以动画的形式展示到达方式的选择界面,此界面与地图模式选择界面类似,标题是一个“到这去”文本占据整个屏幕的宽度,下方是小车、公交、小人三个图标分别代表着驾车、公交、步行三种到达方式。
此界面点击后不仅有功能上的效果,界面上也有相应的效果处理,当用户选择某种方式时,将该方式的图标从黑白变为彩色,同时在地图上以用户位置为起到,点击的icon所在的位置为终点绘制到达路线,当用户切换其他方式时,将原来为彩色的再次置为黑白,同时将选中的置为彩色,规划路线。
规划好路线后,在屏幕下方往上弹出所需时间和距离等信息,如果是驾车方式,增加打车大概需要花费的费用,步行则不要此信息,如果是公交方式,则直接去除地图,直接显示每一种公交的出行方式。三种路线效果如图5-10所示
当用户选择某种方式时,在搜索路线过程中弹出一个显示正在搜索的进度条,当搜索到路线后再让进度条消失,弹出的进度条转圈时,将背景置为半透明,并且如果用户点击半透明背景时,不管是否搜索到路线,均让进度条消失。
当搜索到路线后,调整地图缩放级别到第17级(总共19级),将用户所在的位置使用起点icon标出,终点也就是用户选择的影院的地址用终点icon标出,在起到到终点之间找到最短的路线并且使用交通热力图形式将路线画出来。
路线规划完毕后,用户仍然可以拖动和放大地图,也就是这些操作不影响用户和地图之间的手势交互。
在这里插入图片描述

图5-10 到达方式

5.4 路线详情
由于主界面功能较多并且布局layout比较复杂,因此所有的路线详情页面均为跳转到新的Activity。
5.4.1 驾车详情
当用户选择驾车方式,然后点击路线详情时,跳转到驾车路线详情页,此页面标题为驾车路线详情,左上方有个返回键按钮,使用IamgeView实现,当点击此按钮时,finish这个页面返回到主界面。
此详情页的内容分为两部分,第一部分为驾车所需时间和距离,时间下边提示打车需要的费用,第二部分是路线详情,起点和终点为彩色图标,图标中间分别有起字和终字,路线的每一个步骤使用ListView列出,ListView的每一个item的布局都是由一个图片和在图片右边的文字组成,图片为方向图片,左转、右转、右前方、左前方、直行、掉头每种方向对应一张图片,图片的右边为文字描述,比如在什么位置掉头,沿什么道路直行多少米等。
5.4.2 公交详情
当用户选择公交方式时,跳转到公交线路的Activity,但此Activity仅仅占据屏幕的三分之二,也就是主界面仍然可以看到,因此将主界面中的地图隐藏,使用灰黑色背景代替。线路的Activity使用ListView实现,展示出每种公交的到达方式,ListView每一个item为乘坐的公交线路和需要的时间、总距离以及需要步行的距离。
当用户点击某一个item时,跳转到对应的公交详情Activity,此页面标题为公交路线详情,同样在左上方提供返回按钮,点击手机自带的返回按钮也可以。内容和驾车详情一样分两部分,第一部分是时间和距离,在下方也显示出打出需要的费用,第二部分是乘坐公交从起到到终点的详细过程,包括步行到站点的距离,此项左边图标为灰色小人icon,其次是乘坐的路线,图标为灰色的公交车icon,文字为乘坐的路线、起点站和终点站的名字。
乘坐的线路这一块的内容,默认为收起状态,用户可以点击,点击后展开显示经过的每一个站点的名字,左边以灰色小圆圈作为每一站的icon。
5.4.3 步行详情
当用户选择步行方式时,搜索到路线后,使用交通热力图方式从起点到终点滑出行走路线,同时将地图焦点移动到起点位置,当用户点击路线详情时,跳转到步行路线详情页。
步行详情页和驾车详情页类似,不过步行详情页不显示打车需要花费的金额,步行的每个步骤的图标除了方向图以外,多了灰色的小人图标。
5.5 地图显示
使用地图需要依赖高德地图提供的开源SDK,将地图作为主界面最大的子View添加到主界面的Layout中,根据高德地图官方提供的API使用SDK的各种功能。
5.5.1 SDK使用
前面在主界面部分已经陈述过高德地图SDK详细的配置方法,这里边不在重复,这里主要介绍SDK的功能和使用方法。
SDK里和本应用息息相关的便是用户和地图之间的交互,包括手势交互比如缩放,旋转,拖动等等,除此之外还有在地图上添加覆盖物以及覆盖物的点击事件的处理。
在SDK中,高德地图提供了AMap类保存了各种开发者可能会用到的接口,AMap.OnMarkerClickListener便是我需要通过实现这个接口来监听地图上自己添加的覆盖物的点击事件。在MainActivity中添加这个接口,实现onMarkerClick方法,当监听到有Marker被点击到时,则通过此方法改变Marker的属性以及进行相关操作。
除此之外,包括地图模式的切换、定位蓝点的图标以及颜色、热力图的绘制等功能均是根据SDK提供的接口而实现或者扩展得到的。
5.5.2 热力图绘制
当用户打开视频热力图开关后,根据服务器提供的数据在地图上绘制热力图,按每个城市划分,拿到城市的热门视频,根据视频的点击量判断是否为热门视频然后设置该城市应该显示的颜色。比如一个城市有三部视频,选出这三部视频中点击量最大的那个,判断这个点击量是否达到热门视频的要求,例如大于10000为红色,小于10000大于5000为绿色,小于5000大于2000位蓝色,小于2000位灰色。
判断好每个城市所属于哪种颜色后,在地图上以城市中心点为圆心,添加半径为4万米大小的圆,效果如图5-11所示。
在这里插入图片描述

图5-11 热力图
当用户点击某个地区时,弹出该地区的热门视频对话框,对话框内容和视频推荐的对话框内容差不多,用的都是同一个布局,只是视频推荐中将用户所在地区的其它视频隐藏了,而用户点击热力图弹出来的视频简介,包含该地区的所有视频列表。
对话框顶部显示该地区热门视频中点击量最大的视频的相关图片和简介,中间使用ListView显示该地区的所有热门视频,和侧边栏一样,每个item左边为视频的图片,然后是视频名字,地区以及点击量,当用户点击某一个item时,将顶部的内容换为用户点击的内容。最下方是复制按钮,复制顶部显示的视频的名字和跳转到百度糯米。热门视频对话框效果如图5-12所示。
在这里插入图片描述

图5-12 热门视频对话框
5.6 工具类
工具类指的是封装好一些可以多次使用的类,也就是当一个功能会在多个不同的地方使用到并且依赖的的参数基本一致时,便可以将这个功能封装成一个工具类,每当需要这种功能时变直接调用即可。
5.6.1 SpUtils
SpUtils封装了SharedPreferences的使用,SharedPreferences是保存数据到本地的一种方式,尤其是当数据为基本数据类型时使用起来会很方便,但每次保存和获取数据都新建一个SharedPreferences对象显然不怎么健壮,并且也会增加代码的阅读难度,因此将获取系统的SharedPreferences操作封装成SpUtils,仅仅对外暴露出存数据和读数据的接口,将需要的参数写在接口里即可。
这里SpUtils仅仅使用了保存和读取Boolean型变量的功能,其实SharedPreferences还可以保存整数,字符串等内容,如果需要保存对象,则需要让待保存的对象实现序列化接口,将对象转为字节流,当读取时再将字节流转化为对象即可。
5.6.2 ToastUtils
ToastUtils封装了Toast.makeText方法,使调用者不需要每次都去调动makeText方法,仅需要将需要显示的字符串,显示的时间传入即可。同时ToastUtils还封装了所有的服务器错误码对应的错误提示信息,当服务器返回错误码时,直接将错误码传递给ToastUtils便可以将错误提示语展示给用户。其中便包括路径规划失败比如起点或者终点未设置,距离过长,附近搜不到路等错误信息。
5.6.3 DeviceUtils
DeviceUtils工具类是和设备相关的工具类,包含了把密度dp转换为像素px以及px转为dp的功能,这两个功能在开发中非常有用,因为很多时候有些布局或者控件的打下不可能是在布局文件layout中便定死不变,很多情况下需要动态改变控件大小和位置,那么如何适配不同的屏幕便是一个很大的问题,我们都知道Android手机屏幕的像素密度分160,320,480以及960,在160分辨率手机上1dp等于1px,而在320分辨率的手机上1dp等于2px,而在Java代码中动态控制大小是只支持px像素值的,因此px和dp的互相转换就极其重要。
除此之外,DeviceUtils也提供直接获取到屏幕密度值也就是分辨率的方法,有时候仅仅是dp和px之间的互相转换达不到需求,比如实现图片的缩放,这就需要开发者自己获取到密度值然后进行相关的比例调整。同样,该工具类还提供手机品牌,手机版本号,手机的IMEI值,屏幕的宽高,系统状态栏的宽高,当前使用的SDK的版本号,手机型号等信息的获取。
将这些功能封装好,将来不管是这个应用或者是开发其它新的应用,均可以使用这个工具类,这也是工具类存在的意义。
5.6.4 TextUtils
TextUtils是Android系统提供的一个非常常用的工具类,TextUtils主要是检测字段是否为null或者为空,封装成了TextUtils工具类,则每次避免导致空指针仅仅需要调用TextUtils.isEmpty便可,此方法返回的是一个布尔值对象,当传入的参数为null或者内容为空时变返回true。
由此便开发者便不要每次都是使用string== null && string.equals(“”)来判断string是否被赋值而避免导致空指针异常。空指针异常也是会导致应用奔溃的严重Bug。
5.7 开源框架
开源框架可以帮助我们简化很多操作,比如访问网络因为是耗时操作每次都需要新建一个子线程来运行访问网络的代码,因此我们便可以将新建子线程这个操作封装成一个工具类,当封装的功能比较多时也就形成了一个框架,如果将这个框架发布到GitHub上供别人使用、交流以及优化,变成了我们经常使用的开源框架。
5.7.1 XUtils
XUtils是一个很强大的网络开源框架,使用XUtils可以直接访问网络而不是像以前一样需要自己新建子线程,自己创建Handler来控制多线程中的执行问题,XUtils将创建子线程的操作封装在了自己的工具类里,这部分代码对于开发者来说是不可见也就是透明的,我们不需要去管它是如何访问网络,如何创建线程,我们只需要调用XUtils提供的download方法,将服务器地址作为参数传递给XUtils即可,然后实现下载成功和失败的回调方法,即可实现下载功能。
5.7.2 Gson
Gson是谷歌官方提供的解析Json数据的开源框架,简化了解析Json的步骤,只需要为需要解析的Json数据封装一个数据bean,这个bean里面变量的命名需要和Json数据的key内容完全一致,否则无法解析此变量,当然,数量上可以不一样,Gson仅仅解析干好和Json中key对应上的变量。
Gson的发布简化了解析的步骤,以往解析Json时需要一一对应JsonObject和JsonArray,对象和数组一旦弄错便会解析失败并且抛出异常,如果未捕获此异常便会造成应用奔溃,应用奔溃时开发一个软件的大忌,每个公司都会将应用奔溃的严重级别放到最高级别的Bug中。
5.7.3 ImageLoader
ImageLoader是一个很强大的图片加载开源类库,在内部封装了网络请求操作,因此开发者仅需要将图片的地址,包括本地地址和网络地址传递给ImageLoader并且为其指定要渲染的ImageView即可,不仅如此,ImageLoader还在底层封装了多级缓存,可以设置将图片缓存在内存或者SD卡中,对于网络图片,缓存在SD卡中后下次使用时便不需要再次请求网络而是直接从缓存中获取。
和ImageLoader同时封装在一起的还有DisplayImageOptions,提供了开发者更多的使用场景,ImageLoader会根据传入的DisplayImageOptions来设置各种参数,比如图片的居中剪裁,完全铺满,是否拉伸以及图片在内存或者SD卡中的缓存大小等。
本项目使用ImageLoader加载网络图片,每一个电影对应一张相关的电影海报,在电影列表中使用ImageLoader直接显示而不下载到手机里,但关闭应用时清除这些缓存,不占中用户手机的存储空间。

6 Tomcat服务器实现
Tomcat服务器只有Windows版本,因此只能找一台Win10系统的电脑来搭建Tomcat服务器
6.1 下载安装
从Tomcat官网http://tomcat.apache.org上下载Tomcat9.0版本,注意官网上有Binary版本和Source Code版本,需要下载Binary版本的安装版,否则的话其它版本需要进行各种高级的配置,对于不是专业从事服务器开发的用户来说比较困难。
下载下来是一个exe文件,像安装其他软件一样安装即可,安装完毕后在安装目录下的webapps下的ROOT文件夹里,便是其它设备能通过Tomcat访问到的内容。Tomcat官网如图6-1所示。
在这里插入图片描述

图6-1 Tomcat官网
6.2 Tomcat配置
Tomcat的运行需要依赖JRE环境,可以单独安装JRE也可以安装JDK,其中JDK中便会带有JRE环境,如何安装JDK已经在前面介绍过,这里便不在多说。由于我用MAC系统开发APP,Windows系统中并没有安装JDK,因此,安装JDK,配置环境变量JAVA_HOME,然后让Tomcat关联JDK中的JRE目录,致此Tomcat的环境便搭建完毕。
在浏览器中运行localhost:8080,如果弹出来Tomcat的主页便代表Tomcat搭建成功,此时在cmd里使用ipconfig/all查看电脑本地的IP地址,用此IP地址替换localhost便可以在其它和电脑连接了同一个网络的设备中访问root文件夹下的数据。
6.3 服务器数据
服务器数据分为两部分,一部分是最新版的APP版本号和相关描述以及新版本的下载地址,另一部分为热门视频的相关数据,包含所有地区的最热门视频List以及每个视频的相关信息,比如简介,图片,名字等等。
7 UI设计
UI设计在一个应用中也是一个很重要的模块,UI直接与用户交互,好的设计可以让用户眼前一亮,同时也体现出开发团队的水平以及开发者对该应用的重视程度。有的应用做的比较粗糙,仅仅实现了功能而没有照顾到用户体验,而有的应用界面做的比较精细,比如按钮的点击效果,圆角,阴影等效果。
7.1 Button点击效果
Android提供drawable文件夹可供用户自定义状态选择器,我们要实现的点击效果,圆角等均是通过drawable下的状态选择器实现,注意这里的drawable是保存自定义的选择器的,而图片是保存在drawable-hdpi里面的,这有质的区别。
Button的点击效果使用selector实现,设置当state_pressed为true时为正常的颜色或者图片,当state_pressed为false时为按下的颜色或者图片即可。配置完毕后将Button的background设置为该selector文件,这样便实现了Button的点击效果。
当然我们也可以通过Java代码动态设定,当按下时Button这个类中的isClicked会被置为true,因此我们只需要在代码中监听isClicked字段便可以实现点击效果。但这样比使用selector不好的就是数据和视图结合在了代码中,而Android系统主张数据和视图分离,因此只有在有必要的情况下才在Java代码中动态控制,一般开发能用静态xml实现的均优先使用xml。
7.2 Shape
Shape用来实现各种形状,可以设置总的圆角,也可以单独设置上下左右某个角的圆角,同时可以设置Padding,Padding的作用是内边距,也就是控件内容和控件之间的距离,而Margin是外边距,也就是控件距离其他其它参照物之间的距离。
因为有了Padding,也就可以吧内容和背景分开,可以设置solid的颜色和控件自身的background,这样也就达到了内容周围围绕着一圈指定颜色或者其他东西的效果,像按钮或则图片的边框就是这样实现的。
同时在Shape中也可以套用渐变gradient效果,gradient主要需要三个颜色,也就是startColor、centerColor和endColor,然后设定渐变的方向便可以根据控件大小完成渐变效果的实现。
7.3 9Patch图片
9Patch图片因为其图片后缀名为.9.png所以又称为点9图。9Patch图片在Android的UI部分有着举足轻重的作用,当有的控件会随着不同的状态改变大小时,9Patch图片便解决了背景图的适应问题。
比如按钮的文字的大小和字数可能会在Java代码中动态更改,那么当文字变长或者变短时,兼容按钮的背景图便是一个很难处理的问题,因此Android官方提供9Patch图片来自动适应这种问题。
制作9Patch图仅支持png格式的图片,使用Eclipse时,必须到SDK的安装目录下找到platform中的制作9Patch的工具,而Android Studio中便集成了这一功能,仅仅需要选中一张png图片然后选择生成9Patch文件即可。
9Patch的绘制分为左上右下四个方向,左边和上边的黑线决定了这张图片的可拉伸区域,右边和下边决定了可以展示内容的区域。有关9Patch图片的绘制如图7-1所示。
在这里插入图片描述

图7-1 9Patch图片
7.4 Photoshop
Photoshop是Adobe公司的一款强大的图片编辑软件,以图层叠加的方式编辑图片,精通Photoshop比较有难度,本软件大部分背景图片均是基于Photoshop的一些基本的功能进行UI设计。
8 总结
本设计主要工作为移动端APP的开发和测试,除了基本要求的在地图上以区域为单位用热力图的形式展示出热门视频外,还开发了一个APP的诸多基本功能,比如闪屏页,引导页,以及各种动画效果和点击效果等,算是一款比较完善的应用,当然,由于时间和技术等因数,此应用的功能不是很多,比不上那些团队开发出来的商业及应用,无论是UI设计还是功能交互上,均是以目前已有的经验来开发和设计,没有经过系统的需求分析和评审,集产品、开发、测试和设计于一身,在短短几个月的时间完成此系统,可能会存在一些隐藏得比较深的Bug,但题目的要求已经基本完成,并且添加了很多作为一个开发者应该添加的效果和优化。
本系统移动端应用基于Android平台和MAC系统下的Android Studio开发,因为功能量不是很多,整个项目按代码的类型划分模块,也就是将属于一个类型的Java类放在同一个package里面,符合MVC的开发模式,数据比较复杂时使用adapter适配器模式并且做好数据的优化,使用ViewHolder静态加载布局以及重用ListView的convertView等。

参考文献
[1] 李刚.疯狂Android讲义.第3版.电子工业出版社.2015,8.
[2] Mateosian R. Tomcat: The definitive guide [Book Review][J]. international symposium on microarchitecture, 2003, 23(5): 7-7.
[3] Hristova M P, Misra A, Rutter M, et al. Identifying and correcting Java programming errors for introductory computer science students[J]. technical symposium on computer science education, 2003, 35(1): 153-156.
[4] Felt A P, Ha E, Egelman S, et al. Android permissions: user attention, comprehension, and behavior[C]. symposium on usable privacy and security, 2012.
[5] Zhong M, Wen J, Hu P, et al. Advancing Android activity recognition service with Markov smoother: Practical solutions ☆[J]. Pervasive and Mobile Computing, 2016.
[6] Gavalas D, Economou D. Development Platforms for Mobile Applications: Status and Trends[J]. IEEE Software, 2011, 28(1): 77-86.
[7] Wolfson M. Android Developer Tools Essentials: Android Studio to Zipalign[C]// O’Reilly Media, Inc. 2013.
[8] Jackson W. Android’s LinearLayout Class: Horizontal and Vertical UI Design[M]// Pro Android UI. Apress, 2014:349-385.
[9] Jackson W. Android’s RelativeLayout Class: UI Design Using One Layout Container[M]// Pro Android UI. Apress, 2014:387-409.

致 谢


5、资源下载

本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号毕业设计全套资源(点击下载)
本项目源码基于Android+Tomcat的网络视频探索系统设计与实现(源码+文档)_java__网络视频探索系统.zip

6、更多android毕业设计项目

精选android毕业设计8套——源码+论文完整资源

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业设计方案专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值