基于移动端的网络视频探索系统

1 引言

1.1 研究背景

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

且着智能手机的普及,如今移动用户的万伍越来越庞大,下到八九岁,上到五六十岁,均有移动终端。如此庞大的用户自%也推动着各种移动应用的发展。目前为止大多数人出门己经不再携带现金,而是用支付宝或微信等应用替代现金支付,简单。捷还不用找业。多年前出门人们还东要带地图,东要不断找路人一路,而如今直接使用导航便能节省用户的时间和精力。移动用户的群体会越来越庞大,对移动端各种东求也会越来越主。

1.2 研究意义

移动终端的功能在不断多样化。现如今,基本上可以在智能手机上解决大多数生活中的东求。基于这样的趋势,为了方便移动端用户有关热门网络视频的一些东求,本课中将基于 Android 平台开发一个网络视频探索系统,为用户提供简单、便捷的功能,查看各个区域内热门的视频,以新颖的方式(如主德地图、热地图)来展示各个地区热门视频,帮助用户发现当前最新最火的视频信息。

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

1.3 研究目标

本系统从用户对视频的东求出发,收集并在移动端展示各个区域热门视频的相关信息,并将有可能是用户喜(的视频简介推荐给用户,用户可以击复制喜欢的电影名字,到相关应用购买电影票或者检索详细的信息(比如迅雷下载地址)。

系统也提供开关按钮,使用户可以根据自己喜好选择是否打开视频热地图,提供交通拥堵热地图以及附近的电影院地址,当用户选择某个电影院时为该用户规划到达路线。

系统同时提供比较友好的交互界面,比如使用侧边栏的形式显示功能按钮,设计并开发部分切换动画,界面之间的跳转动画,按钮的击效果等一些人性化的交互方式,使系统成为一个真正应用级别而不是展示级别的 Android 软件。

2 系统设计

系统架构是一个系统或者应用的为架,架构设计的好能够大大简化细节部分的实现,同样,如果架构设计不够灵活的话,无论是开发或者是将来的维护都会造成一定的困难。

2.1 Android 平台

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

而 iOS 应用的开发,使用 Objective-C 语言编写,并且只有 MAC 系统可以开发 iOS 应用,同时 iOS 开发者账亏每年差不多东要一千块钱,诸多原因造成 iOS 应用的成本很主,因此,考虑成本和设备等因素,本系统的移动端基于 Android 系统开发。

2.2 视频探索开源系统

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

2.3 视频探索系统架构

如图 2-1 所示,系统使用 Client/Server 架构。具体来说,此视频探索系统包“两个子系统,一个是 Android 平台下的 APP(热门视频),另一个是使用 Tomcat 搭建的服务器,为 APP 提供数据。

APP 主要负责视频数据可视化”的呈现,将热门视频在地图上通过热地图的形式根据区域呈现给用户,击地图模式可从上方滑出地图模式选择界面,用户可以选择标准地图、夜间地图、卫星模式以及导航模式四个不同模式的地图。击菜单可从右侧弹出菜单侧边栏,提供交通热地图,视频热地图开关,以及目前最热门的视频列表。用户击定位按钮可将地图界面移动到用户所在位置,定位完成后将该区域热门视频推荐给用户,用户可击按钮复制视频名字,也可以同时打开百度糯米。

APP 地图主界面上提供搜索附近电影院的按钮,击后检索附近影院同时标注给用户,击后弹出步行,驾车,公交三种模式的选择,当用户选择后为用户规划到达路线。服务器端使用 Tomcat 在个人电脑上创建,为手机提供热门视频数据,使用 JSON 格式作为服务端和客户端之间的数据接口。

图 2-1 系统架构

2.4 移动端 APP 架构

APP 的架构图如图 2-2 所示。每一个 Activity 为一个界面,每个界面对应一个以小写的 Activity 为前缀 Layout 布局,Adapter 为适配器模式为每个比较复杂的组件提供数据控制功能,Data 为封装的数据 Bean,主要封装网络请求的数据,Overlay 为覆盖物,Utils 为工具包,提供数值转换以及数据保存等功能,View 包里面为在官方提供的组件上新增扩展功能的自定义 View,Layout 为布局文件。

图 2-2APP 架构

2.5 Tomcat 服务器

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

3APP 设计

本章介绍基于 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.1Tomcat 服务器

Tomcat 是一个轻量级的服务器,最重要的一是,它是开源的系统,任何开发者均可免费使用。

在 Windows 下安装 Tomcat 客户端,是电脑与手机连上同一个网络,配置完毕后手机可以通过电脑的 IP 地址访一电脑放在 Tomcat 下的资源。

4.2Json 数据

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 对于这种情况来说就有些大材小用了。

5APP 实现

本章主要介绍 Android 平台下的编码过程和技术要。

本系统 APP 使用 AndroidStudio 做为开发 IDE,所有代码通过 Git 进行版本控制,并将代码托管到 GitHub 仓库进行管理。

Java 是一种面向对象的计算机语言,Android 使用 Java 和 AndroidSDK 进行开发。本系统 APP 采用 MVC 模式作为系统架构。

5.1 配置开发环境

开发环境是进行开发的首要工作,整个开发环境主要包括 AndroidStudio,SDK,JDK 以及模拟器。除此之外还有版本控制工具,服务器环境等。

5.1.1Android Studio

如图 5-1 所示,AndroidStudio 是 Google 官方的 IDE,相对于 Eclipse 在 Android 开发方面有着极大的优势,具体表现在代码补全功能、模拟器、界面、启动速度等方面都远远强于 Eclipse。

Eclipse 优在于范围广,只东要添加对应插件便可进行各个语言的开发,比如开发 Android 只东要装载 ADT 插件,同样 Java 以及 Python 也是在 Eclipse 上装上插件便可以进行开发,缺就是速度慢,广而不精。而 AndroidStudio 便解决了这一一中,AndroidStudio 专注于 Android 开发,可扩展性不强,但是开发 Android 是别的 IDE 不可比拟的。同时,由于 Google 长期以来都是基于 Eclipse 开发,刚发布 AndroidStudio 时东要 Eclipse 主动输出一个 Gradle 文件来配合 AndroidStudio,但即便如此也会引起从 Eclipse 迁移到 AndroidStudio 的各种一中,后来 Studio 发布 2.0 版本后,便己经完全支持 Eclipse 严目,同时,Eclipse 也声明即将不支持 Android 开发,请所有 Android 严目尽早迁移到

Android Studio 中。下载地址:https://developer.android.com/studio/index.html

图 5-1 官方 AndroidStudio 下载界面

5.1.2AndroidSDK

SDK 的全称是 SoftwareDevelopmentKit,想要开发一个 Android 应用,IDE 只是开发工具,SDK 提供了开发包,里面包“了源码、文档以及一些小功能简单的例子等等。SDK 是 Android 接触的最直接的东西,它也就是平时我们调用的各种系统 API。

安装完 AndroidStudio 后,Studio 本身便带有 SDK 的下载界面,本应用采用的是 API23 也就是 Android6.0 系统的 SDK 进行开发。6.0 相对于以前的版本最大的区别就是对权限的控制,6.0 以前访一部分手机数据只东要在清单文件中静态申请权限即可,这些权限会在用户安装应用时告知用户。6.0 以后,访一手机 SD 卡,相册等等便东要动态申请权限,清单文件中静态申请的权限无效。SDK 界面如图 5-2 所示。

图 5-2AndroidSDK 在 Studio 中的下载界面

5.1.3JDK1.8

JDK 是 JavaDevelopmentKit 的缩写,也就是 Java 开发工具包,因为 Android 应用是基于 Java 语言编写的,因此 ☆ 须安装 JDK 工具包,在 Windows 上,安装 JDK 后,东要配置环境变量,在系统的主级设置里面找到环境变量并新增一个名为 JAVA_HOME 的环境变量,指向 JDK 的安装目录。

如果使用 Eclipse 开发,还东要配置 ADT 的环境变量,指向 SDK 安装目录,目的是将 ADB 命令添加到系统命令中。

如果是 MAC 系统,则装好 Studio 就可以了,其余事情都在 Studio 中完成了,本课中是基于 MAC 系统下的 AndroidStudio 开发的。

5.1.4ADB 命令

ADB 的全称是 AndroidDebugBridge,中文名叫安卓调试桥,顾名思义,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.6Git 工具

版本控制指的是通过记录一个文件每一次的修改内容,以便于查看各个版本的内容变化,如今最流行的两款 VCS(版本控制系统)工具便是 Git 和 SVN,由于 SVN 的速度太慢,与远程服务器实时连接,因此目前最流行的 VCS 工具便是 Git,Git 的功能确实极其强大。当%,也有很多历史比较悠久的严目,像百度贴吧,等等一些上了年份”的严目由于迁移代价太大,因此仍%使用 SVN 作为严目的版本管理工具。

5.1.7GitHub

GitHub 是目前最流行的代码托管平台,就相当于一个免费的远程服务器,通过 Git 关联 GitHub 仓库后便可将用户文件 push 到 GitHub 仓库。如今,GitHub 己经收录了无数的开源代码,各行各业的开源库,一般的严目几乎都是选择托管到 GitHub 中,别的开发者可以免费 Download 或者 Fork,以供交流学习。

本应用同样将所有代码托管到 GitHub 中,每次完善一个功能便会更新代码到 GitHub,可供所有人下载交流。链接地址:https://github.com/gsy13213009/gsy_graduation.git

5.2Android 系统

Android 系统是一个移动操作系统,如今大部分手机系统比如小米,华为等均是根据 Google 开源的 Android 系统定制的专属系统。Android 系统的架构如图 5-3 所示。

图 5-3Android 系统架构

5.2.1Linux 层

Linux 层是 Android 系统最底层最核心的部分,这一层包“了 Android 系统与硬件的直接交互的接口、安全系统、进程管理、硬件驱动等等。打开手机的设置,%后查看关于手机便可以看到这个手机系统使用的 Linux 版本。

5.2.2Dalvik ART

Dalvik 是指 Android 运行环境的虚拟机,每一个应用都会分配一个 Dalvik 进程,而每个 Dalvik 进程都是一个 Linux 进程,因此能保证每个 APP 之间相互独立出来不受其他 APP 干扰。

Dalvik 虚拟机采用运行时编译代码,而从 Android5.0 开始,Android 系统开始采用 ART 虚拟机,ART 虚拟机的好处是安装时编译代码,因此可以提升 APP 运行速度,缺点是这样会是 ART 的安装包比 Dalvik 的大,但如今手机的储存大小己经能达到几十个 GB,也就不考虑这大小了。

5.2.3Libraries Runtime 层

Android 系统提供一些 C 语言以及 C++ 语言的系统类库,这些类库通过 Android 的 Framework 供各个组件调用。轻量级的数据库 SQLite、2D 图形引擎 SGL 以及一些媒体库都在这一层。

5.2.4Framework 层

Framework 层也叫程序框架层,也就是开发 Android 程序时使用的系统 API,提供几乎所有东要的功能,主要由 Android 四大组件:Activity,Service,ContentProvider,BroadcastReceiver 组成。

其中 Activity 也就是 APP 的界面,Service 是服务,通常用于东要再后台活动的任务,ContentProvider 负责数据交换,一般是 APP 内部的交换,也可以和其他 APP 互通数据,BroadcastReceiver 负责广播的注册和接收,一般用于监”工作比如监”手机开机、锁屏等等。

5.2.5Application 层

应用层也就是我们打开手机看到的内容,比如日历,短信,电话,计算器等应用便是这一层的内容,当开发好一个软件安装后也会出现在这里。

5.3 应用编码

本小节介绍此应用的整个编码过程和技术要。

使用小米 note 真机作为开发和调试,MAC 下的 AndroidStudio 作为开发软件的 IDE,整个严目的结构如图 5-4 所示。

图 5-4 严目结构

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-5 所示。

图 5-5 闪屏页

5.3.2 新手引导

新手引导页基本上也是每个软件 ☆ 备的界面,为了方便第一次使用的用户知道该软件能做什么以及怎么做,一般会在新手引导页中将操作步骤列出。

本软件在热地图、地图模式、电影院的搜索以及导航四个方面的操作在新手引导页进行了详细的介绍,页面没有上一页和下一页按钮,只可以通过手势滑动,当滑到最后一张时,在界面圆上方显示开始体验按钮。

其中每个页面的切换使用 ViewPager 实现,因为页面的数量比较小并且新手引导页只展示一次,因此并未进行性能的优化,正常来讲应该是当前内存中仅仅保留当前页,上一页以及下一页三个页面,当到第四个页面时应该重用第一个页面,但由于此软件新手引导页数目小,所以并未使用 ViewPager 的懒加载。

当使用手势滑动时,页面上表示当前页面是第几页的红会跟且手指的移动而移动,此技术要是重写 ViewPager 的 onTouchEvent 事件,监”到手势滑动时,将滑动的距离作为红移动的距离,实时重新绘制红即可。

此界面的 ViewPager 页面个数并不写死,使用动态添加页面的方式添加每一个新手引导页以及圆,这样将来维护代码时无论是增加页面还是减少页面都比较容易操作。新手引导页界面如图 5-6 所示。

图 5-6 新手引导页面

5.3.3 主界面

主界面是每个应用实现核心功能的界面,本软件几乎所有的功能均是在主界面完成和呈现的。

5.3.3.1 主德地图 SDK

主德地图 SDK 是整个地图功能的基础,只有使用地图 SDK 才能使用地图的一系列功能,接入主德地图 SDK 前东要先注册成为主德地图的开发者,创建应用以及配置调试版和发布版使用的 Key 的 SHA1 值。配置完成的最终效果如图 5-7 所示。

配置完后获取到主德地图开发者的 Key 值,将此值以及相关权限配置到严目的 AndroidManifest 中,将 SDK 的 jar 包以及 so 文件拷到严目 lib 目录下,最后在 build.gradle 中引入 lib 下的库文件,至此,整个地图的环境便配置完毕。

其中主德地图 SDK 为开发者提供了丰富的可使用的功能模块,包括显示地图,修改定位 icon,定位范围背景色,手势交互,控件交互等一系列可扩展性的功能,其中 3D 地图还包括室内地图,离线地图等功能,采用的数据模式为矢量数据,这种模式的数据效果好,官方维护也频繁,而 2D 地图采用的是栅格数据。本应用采用的是 3D 地图。

图 5-7 配置主德地图开发者账亏

5.3.3.2 显示地图

每一个 Activity 均对应一个 layout 布局文件,在主界面 MainActivity 对应的 layout 文件中,采用相对布局 RelativeLayout 作为界面的根布局,RelativeLayout 布局特是控件之间可以相互重叠,新添加的控件覆盖在界面图层的最上方,控件之间使用相对于某个控件的位置”来确定自己的位置。

将主德地图提供的自定义 View 组件 MapView 作为第一个控件添加到 RelativeLayout 布局中,并使此地图控件占据这个屏幕,去除系统 Activity 自带样式的 TitleBar,此时运行严目,地图占据在整个屏幕上。

由于地图控件 MapView 是一个相当消耗性能的 view,因此在 Activity 中的每一个生命周期中均东要执行对应的操作,比如当 Activity 调用 onDestroy 时,也要调用 MapView 的 onDestroy 方法。Activity 的生命周期如图 5-8 所示。

其中,有关 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 方法,再次进入运行状态。”[1]

图 5-8Activity 的生命周期

5.3.3.3 地图模式

在主界面右上角添加一个 Button,Button 文案设置为地图模式”,提供给用户选择使用不同的地图,当用户击此 Button 时,从手机上方向下滑出地图模式的选择界面,滑出的过程中带有动画效果,设置时间为 300ms,动画效果为先减速%后加速。

在主界面上添加地图模式的选择界面 layout,使用线性布局 LinearLayout 按权重分配四个模式的地图按钮,默认选中第一个标准地图,将选中的地图模式置为彩色,其它三个置为黑白。在 MainActivity 中初始化 Content 时,将此 Layout 在竖直方向上移动-100dp,保证此界面初始化后移出到手机外。

当用户击地图模式时,将此 Layout 从-100dp 移动到 0dp,使此界面出现在手机屏幕内,同时将其余地方添加半透明的遮罩,当击遮罩时,再次把 Layout 移动到手机屏幕外,达到击按钮显示切换地图模式界面的动画效果。

当选择某一地图模式时,将 MainActivity 中的 MapView 置为对应的模式,并且刷新主界面上的地图,让用户可以实时看到选择的地图模式对应的地图样式。此功能效果图如图 5-9 所示。

图 5-9 地图模式

5.3.3.4 定位图标和定位范围

在地图的左下角添加一个 TextView 作为定位按钮,初始 Text 为定位,当用户击第一次的时候,将 Text 改为当前位置,在当前和位置之间加转义符亏/n,这样可以让位置两字显示在当前的下面,/n 在 Android 中代表换行的意思。同时,将地图缩放到 17 级别,并将视图移动到用户所在位置。当用户击第二次时,将标志常量置为 2,代表这是用户第二次击,将文字修改为连续定位并且将地图缩放到最大级别 19 级。标志位默认为 0,击第一次置为 1,第二次置为 2,%后在 1 和 2 之间重复,地图根据标志位的值来判断该如何展示。

定位图标默认为蓝色的小箭头,定位范围也为透明值比较小的蓝色,这样的效果极其不美观,蓝色太深几乎都把建筑物以及建筑物名字的颜色全给盖住了。为此,参照主德地图并且查阅主德地图官方 API 文档将颜色值修改为 2036a9ae,其中 20 的 Alpha 值能保证用户可以清晰的看到建筑物以及建筑物的名字。效果如图 5-10 所示。

图 5-10 定位蓝以及定位范围

5.3.3.5 视频推荐

当用户击定位按钮后,获取到用户所在的经纬度%后根据此位置将这个区域内的热门视频推荐给用户。

定位成功后,弹出一个对话框将此区域的最热门的视频推荐给用户,对话框以视频名字作为标中,简介作为内容,在对话框的下方添加两个按钮,一个为复制视频名字,当用户击时复制电影名字到剪切板。另一个按钮是复制名字并且跳转到百度糯米,当用户击后复制视频名字并且打开百度糯米应用。

剪切板是 Android 系统自带的组件,当击按钮时将内容写入剪切板里面,剪切板在整个手机里面均可使用,也就是当我打开其它应用时,也能获取到剪切板上的内容,剪切板也是 Android 的各个应用之间共享基本数据的一个比较常用的方式。视频推荐界面如图 5-11 所示。

图 5-11 视频推荐和复制名字

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-12 所示。

图 5-12 菜单栏

5.3.3.7 附近影院

在地图的右上角提供搜索附近影院的按钮,当用户击此按钮时,检索用户位置周边的 5 千米内的电影院并用图标标注出来,检索到的电影院根据距离用户位置的大小来排序,距离用户近的排在前面。

使用比较大的红色标注 icon 将前十个影院标注出来,其余的使用比较小的蓝色的 icon 标注,所有 icon 均注册击事件,当监”到用户击时,如果是前十个则将被击的 icon 置为比较大的蓝色图标,并且在图标上方显示该影院的名称,同时类似于菜单栏或者地图模式选择界面的方式弹出到达方式的选择界面。如果不是前十个则被击的 icon 从小的蓝色图标改变为大的蓝色图标,其他逻辑一致。击附近影院按钮的效果如图 5-13 所示。

图 5-13 击附近影院按钮

5.3.3.8 选择到达方式

当用户击某一个影院的 Icon 时,不仅将该 Icon 换为比较大的蓝色图标,并且在图标上方显示影院的名字和详细地址,同时还在手机上方以动画的形式展示到达方式的选择界面,此界面与地图模式选择界面类似,标中是一个到这去”文本占据整个屏幕的宽度,下方是小车、公交、小人三个图标分别代表着驾车、公交、步行三种到达方式。

此界面击后不仅有功能上的效果,界面上也有相应的效果处理,当用户选择某种方式时,将该方式的图标从黑白变为彩色,同时在地图上以用户位置为起,击的 icon 所在的位置为终绘制到达路线,当用户切换其他方式时,将原来为彩色的再次置为黑白,同时将选中的置为彩色,规划路线。

规划好路线后,在屏幕下方往上弹出所东时间和距离等信息,如果是驾车方式,增加打车大概东要花费的费用,步行则不要此信息,如果是公交方式,则直接去除地图,直接显示每一种公交的出行方式。三种路线效果如图 5-14 所示

当用户选择某种方式时,在搜索路线过程中弹出一个显示正在搜索的进度条,当搜索到路线后再让进度条消失,弹出的进度条转圈时,将背景置为半透明,并且如果用户点击半透明背景时,不管是否搜索到路线,均让进度条消失。当搜索到路线后,调整地图缩放级别到第 17 级(总共 19 级),将用户所在的位置使用起 icon 标出,终也就是用户选择的影院的地址用终 icon 标出,在起到终之间找到最短的路线并且使用交通热地图形式将路线画出来。

路线规划完毕后,用户仍可以拖动和放大地图,也就是这些操作不影响用户和地图之间的手势交互。

图 5-14 到达方式

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-15 所示。

图 5-15 路线详情

5.5 地图显示

使用地图东要依赖主德地图提供的开源 SDK,将地图作为主界面最大的子 View 添加到主界面的 Layout 中,根据主德地图官方提供的 API 使用 SDK 的各种功能。

5.5.1SDK 使用

前面在主界面部分己经与述过主德地图 SDK 详细的配置方法,这里边不在重复,这里主要介绍 SDK 的功能和使用方法。

SDK 里和本应用息息相关的便是用户和地图之间的交互,包括手势交互比如缩放,旋转,拖动等等,除此之外还有在地图上添加覆盖物以及覆盖物的击事件的处理。

在 SDK 中,主德地图提供了 AMap 类保存了各种开发者可能会用到的接口,AMap.OnMarkerClickListener 便是我东要通过实现这个接口来监”地图上自己添加的覆盖物的击事件。在 MainActivity 中添加这个接口,实现 onMarkerClick 方法,当监”到有 Marker 被击到时,则通过此方法改变 Marker 的属性以及进行相关操作。

除此之外,包括地图模式的切换、定位蓝的图标以及颜色、热地图的绘制等功能均是根据 SDK 提供的接口而实现或者扩展得到的。

5.5.2 流行度地图

当用户打开视频热地图开关后,根据服务器提供的数据在地图上绘制热地图,按每个城市划分,拿到城市的热门视频,根据视频的击量判断是否为热门视频%后设置该城市应该显示的颜色。比如一个城市有三部视频,选出这三部视频中击量最大的那个,判断这个击量是否达到热门视频的要求,例如大于 10000 为红色,小于 10000 大于 5000 为绿色,小于 5000 大于 2000 为蓝色,小于 2000 为灰色。

判断好每个城市所属于哪种颜色后,在地图上以城市中心为圆心,添加半径为 4 万米大小的圆,效果如图 5-16 所示。

图 5-16 热地图当用户击某个地区时,弹出该地区的热门视频对话框,对话框内容和视频推荐的

对话框内容差不多,用的都是同一个布局,只是视频推荐中将用户所在地区的其它视频隐藏了,而用户击热地图弹出来的视频简介,包“该地区的所有视频列表。

对话框两部显示该地区热门视频中击量最大的视频的相关图)和简介,中间使用 ListView 显示该地区的所有热门视频,和侧边栏一样,每个 item 左边为视频的图),%后是视频名字,地区以及击量,当用户击某一个 item 时,将两部的内容换为用户击的内容。最下方是复制按钮,复制两部显示的视频的名字和跳转到百度糯米。热门视频对话框效果如图 5-17 所示。

图 5-17 热门视频对话框

5.6 工具类

工具类指的是封装好一些可以多次使用的类,也就是当一个功能会在多个不同的地方使用到并且依赖的的参数基本一致时,便可以将这个功能封装成一个工具类,每当东要这种功能时便直接调用即可。

5.6.1SpUtils

SpUtils 封装了 SharedPreferences 的使用,SharedPreferences 是保存数据到本地的一种方式,尤其是当数据为基本数据类型时使用起来会很方便,但每次保存和获取数据都新建一个 SharedPreferences 对象显%不怎么健壮,并且也会增加代码的阅读难度,因此将获取系统的 SharedPreferences 操作封装成 SpUtils,仅仅对外暴露出存数据和读数据的接口,将东要的参数写在接口里即可。

这里 SpUtils 仅仅使用了保存和读取 Boolean 型变量的功能,其实 SharedPreferences 还可以保存整数,字符串等内容,如果东要保存对象,则东要让待保存的对象实现序列化接口,将对象转为字节流,当读取时再将字节流转化为对象即可。

5.6.2ToastUtils

ToastUtils 封装了 Toast.makeText 方法,使调用者不东要每次都去调动 makeText 方法,仅东要将东要显示的字符串,显示的时间传入即可。同时 ToastUtils 还封装了所有的服务器错误码对应的错误提示信息,当服务器返回错误码时,直接将错误码传递给

ToastUtils 便可以将错误提示语展示给用户。其中便包括路径规划失败比如起或者终未设置,距离过长,附近搜不到路等错误信息。

5.6.3DeviceUtils

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.4TextUtils

TextUtils 是 Android 系统提供的一个非常常用的工具类,TextUtils 主要是检测字段是否为 null 或者为空,封装成了 TextUtils 工具类,则每次避免导致空指针仅仅东要调用 TextUtils.isEmpty 便可,此方法返回的是一个布尔值对象,当传入的参数为 null 或者内容为空时变返回 true。

此便开发者便不要每次都是使用 string==null&&string.equals(“”)来判断 string 是否被赋值而避免导致空指针异常。空指针异常也是会导致应用崩溃的;重 Bug。

5.7 开源框架

开源框架可以帮助我们简化很多操作,比如访一网络因为是耗时操作每次都东要新建一个子线程来运行访一网络的代码,因此我们便可以将新建子线程这个操作封装成一个工具类,当封装的功能比较多时也就形成了一个框架,如果将这个框架发布到 GitHub 上供别人使用、交流以及优化,变成了我们经常使用的开源框架。

5.7.1XUtils

XUtils 是一个很强大的网络开源框架,使用 XUtils 可以直接访一网络而不是像以前一样东要自己新建子线程,自己创建 Handler 来控制多线程中的执行一中,XUtils 将创建子线程的操作封装在了自己的工具类里,这部分代码对于开发者来说是不可见也就是透明的,我们不东要去管它是如何访一网络,如何创建线程,我们只东要调用 XUtils 提供的 Download 方法,将服务器地址作为参数传递给 XUtils 即可,%后实现下载成功和失败的回调方法,即可实现下载功能。

5.7.2Gson

Gson 是谷歌官方提供的解析 JSON 数据的开源框架,简化了解析 JSON 的步骤,只东要为东要解析的 JSON 数据封装一个数据 Bean,这个 Bean 里面变量的命名东要和 JSON 数据的 Key 内容完全一致,否则无法解析此变量,当%,数量上可以不一样,Gson 仅仅解析刚好和 JSON 中 Key 对应上的变量。

Gson 的发布简化了解析的步骤,以往解析 JSON 时东要一一对应 JsonObject 和 JsonArray,对象和数组一旦弄错便会解析失败并且抛出异常,如果未捕获此异常便会造成应用崩溃,应用崩溃是开发一个软件的大忌,每个公司都会将应用崩溃的;重级别放到最主级别的 Bug 中。

5.7.3ImageLoader

ImageLoader 是一个很强大的图)加载开源类库,在内部封装了网络请求操作,因此开发者仅东要将图)的地址,包括本地地址和网络地址传递给 ImageLoader 并且为其指定要渲染的 ImageView 即可,不仅如此,ImageLoader 还在底层封装了多级缓存,可以设置将图)缓存在内存或者 SD 卡中,对于网络图),缓存在 SD 卡中后下次使用时便不东要再次请求网络而是直接从缓存中获取。

和 ImageLoader 同时封装在一起的还有 DisplayImageOptions,提供了开发者更多的使用场景,ImageLoader 会根据传入的 DisplayImageOptions 来设置各种参数,比如图)的居中剪裁,完全铺满,是否拉伸以及图)在内存或者 SD 卡中的缓存大小等。

本严目使用 ImageLoader 加载网络图),每一个电影对应一张相关的电影海报,在电影列表中使用 ImageLoader 直接显示而不下载到手机里,但关闭应用时清除这些缓存,不占用户手机的存储空间。

6Tomcat 服务器实现

Tomcat 服务器只有 Windows 版本,因此只能找一台 Win10 系统的电脑来搭建 Tomcat 服务器

6.1 下载安装

从 Tomcat 官网 http://tomcat.apache.org 上下载 Tomcat9.0 版本,注意官网上有 Binary 版本和 SourceCode 版本,东要下载 Binary 版本的安装版,否则的话其它版本东要进行各种主级的配置,对于不是专业从事服务器开发的用户来说比较困难。

下载下来是一个 exe 文件,像安装其他软件一样安装即可,安装完毕后在安装目录下的 Webapps 下的 ROOT 文件夹里,便是其它设备能通过 Tomcat 访一到的内容。Tomcat 官网如图 6-1 所示。

图 6-1Tomcat 官网

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 以及每个视频的相关信息,比如简介,图),名字等等。

7UI 设计

UI 设计在一个应用中也是一个很重要的模块,UI 直接与用户交互,好的设计可以让用户眼前一亮,同时也体现出开发团万的水平以及开发者对该应用的重视程度。有的应用做的比较粗糙,仅仅实现了功能而没有照顾到用户体验,而有的应用界面做的比较精细,比如按钮的击效果,圆角,三影等效果。

7.1Button 击效果

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。部分击效果如图 6-2 所示。

图 6-2 按钮的击效果

7.2Shape

Shape 用来实现各种形状,可以设置总的圆角,也可以单独设置上下左右某个角的圆角,同时可以设置 Padding,Padding 的作用是内边距,也就是控件内容和控件之间的距离,而 Margin 是外边距,也就是控件距离其他其它参照物之间的距离。

因为有了 Padding,也就可以把内容和背景分开,可以设置 Solid 的颜色和控件自身的 Background,这样也就达到了内容周围围绕着一圈指定颜色或者其他东西的效果,像按钮或则图)的边框就是这样实现的。

同时在 Shape 中也可以套用渐变 Gradient 效果,Gradient 主要东要三个颜色,也就是 startColor、centerColor 和 endColor,%后设定渐变的方向便可以根据控件大小完成渐变效果的实现。

7.3 Patch 图片

9atch 图)因为其图)后缀名为.9.png 所以又称为 9 图。9Patch 图)在 Android 的 UI 部分有着举足轻重的作用,当有的控件会且着不同的状态改变大小时,9Patch 图)便解决了背景图的适应一中。

比如按钮的文字的大小和字数可能会在 Java 代码中动态更改,那么当文字变长或者变短时,兼容按钮的背景图便是一个很难处理的一中,因此 Android 官方提供 9Patch 图

)来自动适应这种一中。

制作 9Patch 图仅支持 png 格式的图),使用 Eclipse 时,☆ 须到 SDK 的安装目录下找到 Platform 中的制作 9Patch 的工具,而 AndroidStudio 中便集成了这一功能,仅仅东要选中一张 PNG 图)%后选择生成 9Patch 文件即可。

9Patch 的绘制分为左上右下四个方向,左边和上边的黑线决定了这张图)的可拉伸区域,右边和下边决定了可以展示内容的区域。有关 9Patch 图)的绘制如图 7-1 所示。

图 7-19Patch 图)

7.4Photoshop

Photoshop 是 Adobe 公司的一款强大的图)编辑软件,以图层叠加的方式编辑图),精通 Photoshop 比较有难度,本软件大部分背景图)均是基于 Photoshop 的一些基本的功能进行 UI 设计。

8 总结

本设计主要工作为移动端 APP 的开发和测试,除了基本要求的在地图上以区域为单位用热地图的形式展示出热门视频外,还开发了一个 APP 的诸多基本功能,比如闪屏页,引导页,以及各种动画效果和击效果等,算是一款比较完善的应用,当%,由于时间和技术等因数,此应用的功能不是很多,比不上那些团万开发出来的商业及应用,无论是 UI 设计还是功能交互上,均是以目前己有的经验来开发和设计,没有经过系统的东求分析和评审,集产品、开发、测试和设计于一身,在短短几个月的时间完成此系统,可能会存在一些隐藏得比较深的 Bug,但中目的要求己经基本完成,并且添加了很多作为一个开发者应该添加的效果和优化。

本系统移动端应用基于 Android 平台和 MAC 系统下的 AndroidStudio 开发,因为功能量不是很多,整个严目按代码的类型划分模块,也就是将属于一个类型的 Java 类放在同一个 Package 里面,符合 MVC 的开发模式,数据比较复杂时使用 Adapter 适配器模式并且做好数据的优化,使用 ViewHolder 静态加载布局以及重用 ListView 的 convertView 等。

为简化代码使用移动布局的方式来代替使用 Fragment 加载比如地图模式,侧边栏菜单等界面,同时使用动画和遮罩的形式使应用看起来更精细。而 UI 部分确实是没有天赋,只能通过 Photoshop 进行简单的设计和处理,做不出像设计师设计的那种精美的图),在我自己看起来感觉都差不多,但比起那些专业的图)来说肯定是有着天壤之别的。

服务端采用 Tomcat 实现主要是因为 Tomcat 简洁方便并且开发者可以免费使用,我在做大创时曾今租用过下里云的服务器和云梦网的域名,这样可以直接使用数据网络便可以访一到我租用的服务器下的资源,通过远程站操作该服务器维护数据,可惜服务器在 16 年 6 月便到期了,一开始我也打算再租用半年,但后来觉得校园网无处不在,自己借用校园网搭建一个本地的服务器也可以完成功能,查询有关资料后最终选择使用 Tomcat 服务器。

做完毕设,收获良多,不仅仅是技术上的提主,还有心态上的成长,毕业论文每天写一,差不多连续写了一周,有一天感觉状态特别好,写的根本停不下来,特别想直接把论文写完,后来才发现太不现实,才明白一两万字的论文不是光凭一时半会的好状态就能写完的,东要脚踏实地,一一滴的积累。

♻️ 资源

大小: 46.6MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87379045

基于Android 移动端的网络视频探索系统【100010403】相关推荐

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

    基于Android+Tomcat的网络视频探索系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+Tomcat的网络视频探索系统设计与实现,文章末尾附有本毕业设计的论文和源 ...

  2. 基于Android的3G手机网络摄像机客户端软件设计

    深入研究了MJPEG视频压缩算法,阐述了算法实现过程,并设计出基于Android操作系统的3G手机网络摄像机客户端软件.本系统通过实地安装与测试达到了预期效果,突破了传统网络摄像机客户端固定地域的限制 ...

  3. java 28181协议_WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台

    wvp WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康.大华.宇视等品牌的IPC.NVR.D ...

  4. 基于MPEG-4和RTP的网络视频监控系统研究

    基于MPEG-4和RTP的网络视频监控系统研究 文/北京邮电大学通信网络综合技术研究所  龚猷龙 刘勇 摘  要:随着计算机.网络及多媒体通信技术的发展,视频监控在业界得到了广泛的应用,许多先进的技术 ...

  5. android webView加载网络视频

    之前,我写过webView加载本地网页的博客,今天,就写写webView加载网络视频的内容. 一.加载网页 1.WebView用来显示网页,使用必须时刻注意我们需要添加网络权限 <uses-pe ...

  6. 基于嵌入式技术的网络视频监控系统

    随着计算机技术及网络技术的迅猛发展,世界掀起一股强大的数字化.网络化浪潮,对于公安.安防行业的发展,必须经历模拟数字混合的阶段,但是最终的趋势必然是全面数字化,即视频在前端进行数字化.网络化,采用嵌入 ...

  7. Android之MediaPlayer播放网络视频的实现方法

    前段时间忙于工作,现在有时间来分享一下: 这篇文章主要介绍了Android的MediaPlayer播放网络视频的实现方法,是一个非常实用的功能,需要的朋友可以参考下 前面讲解了MediaPlayer播 ...

  8. 【智慧养殖解决方案】如何使用EasyGBS构建鱼塘养殖高清网络视频监控系统?

    一.方案背景 随着我国农业的快速发展,以及对新兴技术的应用,养殖业.农牧业.种植业等也面临着全新的挑战与机遇.如何与新兴技术结合,建立智能化的远程监控平台,实现高效管理.提高经济效益和市场竞争力? 以 ...

  9. 基于android平台的语音机器人服务娱乐系统

    分 类 号:TP311 学校代码:11460 学 号:10130920 本科生毕业论文 基于android平台的语音机器人服务娱乐系统 Robot Entertainment Service Syst ...

最新文章

  1. RHEL5.1安装VM TOOL及中文乱码终极解决方案
  2. 今日头条新员工哀叹:要抑郁了!入职没人带,需求不知道,名词不解,测试去哪儿不知道!...
  3. 加密界又一响声:WhatsApp宣布对所有通讯信息进行端到端加密
  4. OrgChart 组织架构与PHP结合使用
  5. S/4HANA里通过key user tool将Extension field添加到UI上的技术实现
  6. 14.cookie与自动登陆
  7. 如何使用Dockerfile构建镜像
  8. Eureka Server集群同步
  9. (转载)黑白帽子思路
  10. android 编译 libjpeg-turbo,android 编译libjpeg-turbo
  11. cad lisp 背景遮罩_AutoCAD心得体会
  12. python rtf转txt_批量定时任务将rtf文件转为docx,入参是rtf文件夹,生成一个docx文件夹...
  13. 【专栏】腾讯产品:写给产品经理和设计师的用户体验知识3
  14. 电表芯片CS5460A调试心得
  15. oracle修改查询结果,Oracle使用查询结果更新表的方法
  16. 处理器最新排行_鲁大师Q2季度PC硬件排行:Intel十代酷睿初入战局,最受欢迎CPU是它...
  17. Saleae Logic 16 逻辑分析仪
  18. [杂言] GoodBye,2016
  19. 【机器学习】简单理解精确度(precision)和准确率(accuracy)的区别
  20. 倩女手游经验计算机,倩女幽魂手游怎么快速升级 新手升级攻略详解

热门文章

  1. A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束
  2. 贪吃蛇c++语言程序,利用C/C++实现较完整贪吃蛇游戏
  3. 2021年中国物联网(IoT),保障公共安全市场趋势报告、技术动态创新及2027年市场预测
  4. 虾米音乐爬虫实战分析 批量下载虾米音乐到本地
  5. 缓存之缓存击穿、缓存穿透和缓存雪崩
  6. 华为存储系统运维管理场景演练
  7. 二阶电路的零状态响应
  8. 计算机仿真技术教学大纲,计算机仿真技术教学大纲讨论稿
  9. 众筹融资主要有哪些模式?
  10. COM新手入门知识点汇总