基于安卓平台的地图集展示应用程序开发

2018-01-19 11:35谢三五张志新李昕
软件导刊 2018年10期
关键词:安卓控件视图

谢三五 张志新 李昕

摘要:传统地理信息地图集产品一般为纸质图件或电子图片。在电子产业迅速发展的时代,纸质成果携带不方便、保存成本高,而保存于成果数据库的电子图片也常常在项目结束后被很快封存,宣传与展示受限的缺陷日益凸显。基于安卓移动端应用程序开发平台设计开发地图集展示应用程序,可实现移动端的电子地图集浏览与展示。该应用程序能解决大型图片在安卓移动端的浏览受限问题,操作便捷流畅,能很好地为用户展现各类丰富的地图集产品,为地图集制作方提供了出版物展示的新模式。

关键词:安卓;移动端;地图集;地理信息

DOIDOI:10.11907/rjdk.181245

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2018)010-0114-03

英文摘要Abstract:Usually, the traditional Geographic Information Atlas products are paper-made maps or electronic images. In the era of rapid development of the electronics industry, paper-made maps are inconvenient to carry, and the cost of preservation is high. Electronic image saved in the achievement database are often sealed up for safekeeping soon after the project is completed. The limitations of propaganda and exhibition are becoming more and more serious. Design and development of the atlas exhibition application based on the platform of android mobile application development can implement the mobile browse and exhibition of electronic atlas. The application can release the restrictions on Android mobile browse of large images, and it operates conveniently and smoothly. The application can commendably exhibit all kinds of Atlas products for users. And it provides a new mode for the atlas producers to exhibit their publications.

英文关键词Key Words:Android; mobile; atlas; geographic information

0 引言

隨着计算机与通信网络技术的迅猛发展,手机、平板电脑等便携移动终端不仅仅是通讯网络的终端,还逐渐成为互联网应用终端,因此移动终端的服务和软件有着广阔的发展空间,尤其是在市场潜力巨大的安卓(Android)平台上[1-2]。目前在移动应用软件市场上,各类矢量地图、导航地图应用产品非常丰富,一些大众化的电子图书阅读与图片浏览应用软件也层出不穷,如王华旭[3]重点研究了人脸识别与内容分类技术,开发了智能手机相册应用;黄凯[4]研究开发的图片管理器,完善了对图片的格式支持、浏览、修改等管理功能;陆咏梅等[5]研究了在移动端全屏浏览批量图片的技术,旨在提高用户体验。然而,此类研究主要针对常用图片,目前市场上很难找到针对专题地理信息地图集的阅读应用。在该情况下,推出基于安卓移动终端的地图集产品正逢其时,同时也是出版行业与移动互联时代对接的一次创新型尝试。

本文设计可满足安卓移动终端要求的电子地图集产品格式,同时研发应用程序(“微地图”APP),建立APP形式的地图集出版物展示新模式,将收集到的地图集数据成果放在移动平台上进行发布、交流与展示。该形式相比于纸质阅读具有更大的信息量与更强的便捷性。APP展示的地图集产品,不仅为热爱研究地图产品特色的地图行业专业人员提供相互学习与借鉴的资源,同时也向大众提供旅游、历史、专题查询等各类地图服务。

由于图集图片具有内容丰富、清晰度高、数据量大的特点,因此,本文重点研究针对大型图片的浏览处理技术,创新性地实现了流畅的手势缩放浏览。

1 总体设计

1.1 环境框架设计

由于移动设备对网络环境与数据承载能力的要求非常高,本文设计采用离线服务,图集产品集成在安装包中,在APP界面中以类似书架的形式进行展示。考虑到客户端容量,对实际上架的图集产品进行内容选取与格式压缩,以达到最优运行速度与内容丰富度的平衡。

本文APP的开发使用Eclipse平台,该平台是一个开放源代码、基于Java的可扩展开发平台,其本身是一个框架和一组服务,可利用插件组件构建开发环境。开发工具包为Android SDK,通过ADT插件接口进行工作。

考虑到屏幕制式的差别(屏幕密度与尺寸差异),同时制作手机和HD平板两个版本。

1.2 数据模型设计

设计完成地图集产品的分类模式(政区、旅游、历史等)、数据格式(图集产品扫描格式)、各图集展示产品分辨率(DPI)、数据量大小规范等基础数据信息。根据这些基础信息,选择APP展示的地图集,确立整体数据量大小。

设计完成后,对各图集进行标准格式化,形成规范的位图资源,以方便应用程序调用。

1.3 功能模型设计

设计完成APP程序的界面布局与功能模块。APP初次启动时,首先进入过场欢迎图片,内容为制作方的简短介绍与背景产品,通过手势滑动进行浏览,结束后进入主界面。主界面设计原则为:风格统一、特点突出、功能显示清晰。主界面布局如图1所示。

2 主要功能实现

2.1 地图产品展示模块

每个图集产品均在APP中体现其信息,包括封面图片、标题、产品介绍与分类信息。通过点击主界面 “书架”上的列表或上方广告,选择相应图集后,进入地图浏览界面。“书架”继承自安卓的ListView类,并通过技术手段进行了改进。

进入地图浏览页面后,通过手势缩放动作,利用Android SDK的相关类设计巨幅地图浏览功能,实时获取屏幕范围的真实分辨率内容,可解决一般方法对图片大小的限制。在页面中设计了前后翻页、页码选择及跳转功

能,地图浏览页面可进行横竖屏实时切换。通过这些功能组合,为用户提供良好的浏览体验。

2.2 分类与检索模块

在首页可以分类浏览图集,也可通过模糊搜索检索相关产品。同时,设计检索失败相关提示,以方便用户快速阅览使用。模块功能局部界面如图2所示。

2.3 其它模块

介绍单位的人员实力、地图生产能力、技术特色、联系方式等信息。点击右上方 “关于”按钮,进入后可查阅软件版本与帮助信息,并可再次浏览欢迎页面,以方便用户了解制作方与APP的详细信息。

3 关键技术

3.1 屏幕适配技术

在移动设备(手机、平板)市场上,产品丰富程度呈指数态势增长。不同设备的物理尺寸(单位:英寸)、设备分辨率(单位:像素)和屏幕密度(单位:DPI)各不相同。为了解决各类不同密度屏幕的界面布局问题,本文采取两种措施保证屏幕的正常显示。

一是在XML布局文件中对控件高宽采用相对布局(Relative Layout)方式,并且在定义长宽时,使用wrap_content(根据内容适配)或fill_parent(匹配父控件),以保证在屏幕上展示时尺寸大小合适,同时避免使用像素等单位。

二是在手机版本和HD版本布局开发时,对各类控件的尺寸设置均采用密度无关的像素单位(Density-independent pixel—dip)(控件为DP、文字为SP)。该单位根据设备的物理尺寸和DPI密度进行对应像素转换,以匹配不同的硬件设备屏幕。

本文针对目前主流的移动设备进行统计,对其物理尺寸特征与密度进行分析,以此决定开发中各控件的大小水平。以一个高度为100dp的控件为例,其在真实手机屏幕中的实际像素占比情况如表1所示。

通过表1可以得出,在手机版本开发中,以dp为单位设置控件大小,在使用率较高的手机中,均可得到一致的显示比例,而不会呈现明显的显示比例不均的情况。因此,只需在工程中设计一个版本的布局,便可支持大部分的手机屏幕显示,HD平板设计同理。

3.2 安卓列表栏自带问题修复

在利用Android SDK開发列表栏时,传统方法是布置ListView控件,使用BaseAdapter类实现数据填充。安卓系统开发的默认机制是:对屏幕中可视的列表内容部分进行缓存,对于由于屏幕大小有限需要下拉才能显示的内容则未放入缓冲,以节约系统资源。但是如果采用此类默认机制进行开发,在用户滑动列表栏浏览时,会造成列表内容显示混乱。原因在于:在某行滑动出屏幕时,系统开始对列表视图进行数据重构,重构时会复用滑动之前的视图缓存,而不是对新视图进行重新填充,从而造成混乱。

为解决该问题,本文采用继承自BaseAdapter的ListViewAdapter类进行数据填充,并对类中的getView方法进行改进。有某行滑出屏幕时,视为存在变化的视图(ConvertView)。若ConvertView为空,进行布局与数据填充;若收到新的ConvertView,复用布局视图。针对这两种情况,不管视图是否重用,都重新设置数据。

使用一个内部类持有布局文件中相关视图的引用,在每次视图复用时,通过引用进行加载,比传统加载新视图的方法能更好地提高效率。

3.3 大型图片浏览技术

在安卓开发中,图片加载的一般思路是使用setImageBitmap或setImageResource等方法设置一张大图,这些函数最终都是通过Java的createBitmap完成的,非常消耗资源,也容易造成系统运行崩溃。

本文设计了一个继承自安卓SurfaceView父类的ImageSurfaceView类进行大型图片加载与手势移动、缩放等操作,扩展其对过大缓存数据的支持功能。主要工作机制是:根据设备屏幕的像素范围形成一个真实分辨率绘制区域Viewport(屏幕实际像素范围),每一次屏幕渲染只针对屏幕可视部分,从而减少不必要的图片处理。在Viewport周围给定一个具有外扩范围的图片缓存范围Cache(缓存区域范围),每当有手势动作拖动图片进行范围重绘时,利用Cache中已缓存好的内容进行补充,在手势动作完成时绘制Viewport内容。通过这种动态加载机制,可解决因图片过大导致无法显示或系统崩溃的问题,以及重绘时速度过慢的问题。

4 软件评价与展望

4.1 离线与在线形式优劣势对比

本文设计的APP为本地离线形式,地图集产品打包封装于APP安装包中,在客户端进行安装后,程序占用存储空间较大是其劣势,但其优势是:安装完成后不会再因图片大小或网络环境因素影响用户使用体验。

解决程序数据量大的方式是采用在线形式进行地图集浏览,其优势是占用存储空间小,用户可选择浏览的产品更多,但其劣势为:网络环境的优劣对用户的使用体验影响较大,浏览大型图片时可能造成等待时间过长,并且在蜂窝移动网络下流量消耗大,经济性较差。

4.2 软件总体评价

4.2.1 实用性与可靠性

本文完成的应用程序主体功能明确、操作直观便捷,对于地图集制作相关专业用户与对地图感兴趣的公众用户而言,实用价值较高。程序整体系统结构合理,在真机测试中使用2011年的中低端配置,对大型图片进行操作时,响应速度快,整体可靠性高。

4.2.2 可扩展性与前瞻性

本文开发使用的Eclipse平台是目前安卓系统APP开发的主流软件平台之一。开发中,功能的设计与实现完全依据软件开发行业规范,能够满足后期对扩展性的基本要求。

在部分功能的实现上,本文采用自定义列表显示、大型图片缓存等技术方法,在保障项目正常运作的同时,也为将来的优化与扩展打下良好基础。

参考文献:

[1] 陈人骐.基于Android手机的电子地图服务软件设计与实现[D].成都:电子科技大学,2012.

[2] 吴想想.基于Android平台软件开发方法的研究与应用[D].北京:北京邮电大学,2011.

[3] 王华旭.基于Android平台的智能手机相册的设计与实现[D].广州:中山大学,2014.

[4] 黄凯.基于Android的图片管理器设计与实现[D].济南:山东大学,2013.

[5] 陆咏梅,俞震,陶洪峰.移动终端图片智能浏览系统[J].通讯世界,2017(2):84-85.

[6] 万利成.手机相册系统的设计与实现[D].长春:吉林大学,2016.

[7] 陈星,江兰帆.基于Google Android平臺的移动开发研究[J].福建电脑,2008(11):156-157.

[8] 李宝韩.基于Android的PhoneGap平台研究及其跨移动平台媒体框架的扩展[D].广州:华南理工大学,2012.

[9] 张毅,张志国.基于Google Android平台平板电脑应用程序开发[J].科技信息,2011(10):632-633.

[10] 杨潇亮.基于安卓操作系统的应用软件开发[J].电子制作,2014(19):45-46.

[11] 顾兆申.基于iOS平台的图片集成处理器的设计[D].大连:大连海事大学,2017.

[12] 翟宇.基于Android系统下的校园三维地图的开发和研究[D].晋中:山西农业大学,2015.

[13] 舒贤华.基于Android平台的手机Web地图服务设计[D].大连:大连海事大学,2009.

[14] 钟键.图片浏览软件设计[J].电脑编程技巧与维护,2016(9):76-77.

[15] 吴晓泉.Android室内矢量地图SDK的设计与实现[D].北京:北京邮电大学,2014.

[16] 黄现云.基于Android平台电子阅读客户端的设计与实现[D].北京:北京交通大学,2014.

(责任编辑:黄 健)

猜你喜欢
安卓控件视图
文物表情包
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
一种基于安卓系统的手机侧抓包分析方法
ASP.NET服务器端验证控件的使用
安卓L未至安卓M来了!安卓首泄漏M系统
Spreadsheet控件在Delphi数据库系统中的编程与应用