1、摘要I基于ANDROID的电子相册功能模块设计与实现摘要随着智能手机的逐渐普及,手机已经成为人们生活中不可缺少的一部分。而如今智能手机像个人电脑一样,具有独立的操作系统。我们可以享受智能手机给我们带来的拍照,看电影,听音乐等多媒体服务。当然智能手机上还必须要有的一个服务就是图片浏览服务,我们可以通过图片来记录下我们生活中的美妙瞬间。本课题是在ANDROIDSDK22平台下,实现了一个手机电子相册。主要采用ANDROID平台的FRAMEWORK层提供的接口,实现了图片的文件夹路径的显示,图片的查看、放大、缩小等基本功能,支持JPG、BMP、PNG和GIF图片格式,该程序是独立的APK文件,可以安
2、装在ANDROID22以上的系统版本的手机上。本文在分析讨论ANDROID手机软件开发技术原理的基础上,开发出能为用户提供更好的基于ANDROID平台的图片浏览器。以图片浏览器的页面为主线进行分析和研究的,进而研究了ANDROID程序开发环境的搭建,ANDROID工程文件中的各个文件的作用,程序界面的设计,程序数据的处理,图片的异步加载,防止程序的内存溢出以及自定义控件的使用。关键字ANDROID;图片浏览器;智能手机平台;异步加载;内存溢出ABSTRACTIIBASEDONTHEELECTRONICPHOTOALBUMANDROIDFUNCTIONALMODULEDESIGNANDIMPLE
3、MENTATIONABSTRACTWITHTHEPOPULARITYOFSMARTMOBILEPHONE,MOBILEPHONEHASBECOMEANINDISPENSABLEPARTOFPEOPLESLIFENOWTHEINTELLIGENTMOBILEPHONELIKEAPERSONALCOMPUTER,WITHANINDEPENDENTOPERATINGSYSTEMWECANTAKEPICTURES,ENJOYINTELLIGENTMOBILEPHONEBRINGSUSTOWATCHMOVIES,LISTENTOMUSICANDOTHERMULTIMEDIASERVICESOFCOURS
4、E,THEINTELLIGENTMOBILEPHONEALSOMUSTHAVEASERVICEISTHEPICTUREBROWSINGSERVICE,WECANTHROUGHTHEPICTURETORECORDOURLIFEINTHEMOMENTTHISTOPICISINTHEANDROIDSDK22PLATFORM,THEREALIZATIONOFAMOBILEPHONEELECTRONICPHOTOALBUMUSINGFRAMEWORKPLATFORMANDROIDLAYERPROVIDESTHEINTERFACE,REALIZETHEPATHOFTHEFOLDERIMAGEDISPLAY
5、,PICTUREOFTHEVIEW,ZOOM,ANDOTHERBASICFUNCTIONS,SUPPORTFORJPG,BMP,PNGANDGIFIMAGEFORMAT,THEPROGRAMISINDEPENDENTOFTHEAPKFILES,SYSTEMVERSIONCANBEINSTALLEDINMORETHANANDROID22MOBILEPHONEINTHISPAPER,BASEDONANALYZINGTHEPRINCIPLEOFANDROIDMOBILEPHONESOFTWAREDEVELOPMENTTECHNOLOGYONANDROIDPLATFORM,DEVELOPEDBASED
6、ONTHEIMAGEBROWSERTOPROVIDEUSERSWITHBETTERINTHEPHOTOBROWSERPAGESASTHEMAINLINEOFANALYSISANDRESEARCH,ANDTHENSTUDIEDTHEANDROIDPROGRAMDEVELOPMENTENVIRONMENTTOBUILDTHEANDROIDPROJECTFILE,EACHFILEINTHEROLE,DESIGNOFTHEPROCEDUREINTERFACE,DATAPROCESSINGPROGRAM,ASYNCHRONOUSLOADINGPICTURE,PREVENTTHEPROGRAMMEMORY
7、OVERFLOWANDTHEUSEOFACUSTOMCONTROLKEYWORDANDROIDPHOTOBROWSERSMARTPHONEPLATFORMASYNCHRONOUSLOADINGMEMORYLEAK目录III目录第1章绪论111ANDROID系统简介112ANDROID系统架构113ANDROIDJAVA开发方向214组织结构2第2章系统分析与设计321功能分析322性能分析323界面设计4231用户界面的设计4232功能的设计6第3章ANDROID开发环境的搭建831开发环境搭建需要的软件832ANDROID开发平台的搭建8321JDK安装8322ECLIPSE的安装9323A
8、NDROIDSDK安装10324ADT安装11325创建ADT12第4章程序的实现13目录IV41ANDROID项目的总体架构以及其用途1342功能的实现16421第一个界面欢迎界面16422第二个界面主界面18423第三个界面GRIDVIEW界面19424第四个界面单张图片显示界面24第5章总结30参考文献31第1章绪论1第1章绪论11ANDROID系统简介ANDROID是一种以LINUX为基础的开放源的操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安智”。ANDROID操作系统最初由ANDYRUBIN开发,最初主要支持手机。2005年由GOOGLE
9、收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。ANDROID的主要竞争对手是苹果公司的ISO以及RIM的BLACKBERRYOS。2011年第一季度,ANDROID在全球的市场份额首次超过塞班系统,跃居全球第一。2012年2月数据,ANDROID占据全球智能手机操作系统市场525的份额,中国市场占有率为684。12ANDROID系统架构ANDROID的系统架构和其它操作系统一样,采用了分层的架构。ANDROID分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和LINUX核心层。ANDROID是以LINUX为核心的手机操作平台,作为一款开放式的操作系
10、统,随着ANDROID的快速发展,如今已允许开发者使用多种编程语言来开发ANDROID应用程序,而不再是以前只能使用JAVA开发ANDROID应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。在ANDROID中,开发者可以使用JAVA作为编程语言来开发应用程序,也可以通过NDK使用C/C作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如PYTHON、LUA、TCL、PHP等等),还有其他诸如QT(QTFORANDROID)、MONO(MONOFORANDROID)等一些著名编程框架也开始支持ANDROID编程,甚至通过MONODROID,
11、开发者还可以使用C作为编程语言来开发应用程序。另外,谷歌还在2009年特别发布了针对初学者的ANDROIDSIMPLE语言,该语言类似BASIC语言。而在网页编程语言方JAVASCRIPT,AJAX,HTML5,JQUERY、SENCHA、DOJO、MOBL、PHONEGAP等等都已经支持ANDROID开发。而在ANDROID系统底层方面,ANDROID使用C/C作为开发语言。第1章绪论213ANDROIDJAVA开发方向ANDROID支持使用JAVA作为编程语言来开发应用程序,而ANDROID的JAVA开发方面从接口到功能,都有层出不穷的变化。考虑到JAVA虚拟机的效率和资源占用,谷歌重新设
12、计了ANDROID的JAVA,以便能提高效率和减少资源占用,因而与J2ME等不同。其中ACTIVITY等同于J2ME的MIDLET,一个ACTIVITY类(CLASS)负责创建视窗(WINDOWS),一个活动中的ACTIVITY就是在FOREGROUND(前景)模式,背景运行的程序叫做SERVICE。两者之间通过由SERVICECONNECTION和AIDL连结,达到复数程序同时运行效果。如果运行中的ACTIVITY全部画面被其他ACTIVITY取代时,该ACTIVITY便被停止(STOPPED),甚至被系统清除(KILL)。VIEW等同于J2ME的DISPLAYABLE,程序人员可以通过VI
13、EW类与“XMLLAYOUT”档将UI放置在视窗上,ANDROID15的版本可以利用VIEW打造出所谓的WIDGETS,其实WIDGET只是VIEW的一种,所以可以使用XML来设计LAYOUT,HTC的ANDROIDHERO手机即含有大量的WIDGET。至于VIEWGROUP是各种LAYOUT的基础抽象类(ABSTRACTCLASS),VIEWGROUP之内还可以有VIEWGROUP。VIEW的构造函数不需要再ACTIVITY中调用,但是DISPLAYABLE的是必须的,在ACTIVITY中,要通过FINDVIEWBYID来从XML中取得VIEW,ANDROID的VIEW类的显示很大程度上是从
14、XML中读取的。VIEW与事件(EVENT)息息相关,两者之间通过LISTENER结合在一起,每一个VIEW都可以注册一个EVENTLISTENER,例如当VIEW要处理用户触碰(TOUCH)的事件时,就要向ANDROID框架注册VIEWONCLICKLISTENER。另外还有BITMAP等同于J2ME的IMAGE。14组织结构通过本软件的开发,我们可以熟悉和掌握在ANDROID平台上的程序开发的环境的搭建,熟悉和掌握在ANDROID平台上的程序的设计开发流程,熟悉和掌握在ANDROID平台下编程常遇到的问题及解决办法。第一章主要阐述了下ANDROID的发展历史,ANDROID的系统框架以及其
15、JAVA方向的开发方面的内容。第二章主要是对系统做的功能分析,性能的分析和程序设计。第三章主要讲述的是ANDROID开发环境的搭建的相关问题。第四章主要描述的是本软件开发过程中的一些要点和难点,并贴上源代码来描述解决的一些方法。第五章是对开发该程序做一个系统性的总结。第2章系统分析与设计3第2章系统分析与设计21功能分析如果您经常用手机拍照,那么您的手机里一定保存着数量众多的图片文件,闲暇的时候打开来和好友分享,怎能少了手机电子相册。本电子相册是一个功能齐全的图片浏览器,软件主要由四个界面构成第一个界面一个欢迎界面,并在其中读取数据,提高程序的效率。第二个界面显示的是SD卡中所有包含了图片文件
16、的文件夹,且以该文件夹里面的第一张图片作为该文件夹的图标。第三个界面当点击第二个界面的文件夹图标的时候进入第三个界面,并在其中显示该文件夹里面的所有图片。第四个界面当点击第三个界面里面的某个图片的时候,进入第四个界面,显示点击的那张图片,该界面实现了多点触控图片的放大和缩小功能,当往左滑时,跳转到下一张图片,当往右滑的时候跳转到上一张图片。本电子相册不同于其他的软件,界面做的很友好,有欢迎界面,有文件夹,对手机中的图片进行归类,而且在第二个界面我们可以看到图片的物理地址,可以很快的找到图片的储存的文件目录。程序的架构包含三个模块模块1程序界面。模块2后台服务,后台数据处理。模块3处理界面的刷新
17、。22性能分析我认为本程序中的异步加载图片和防止程序的内存溢出是重点和难点所在。为了防止程序的内存溢出,我把该程序设计成分页浏览模式,假如说图片的数量大于30张的话,程序只会加载当前你所需要浏览的那一页的图片,并把以前浏览的图片所占的内存给清理掉。而图片的异步加载的目的就是为了提升用户的体验效果,假如把图片的加载放入到主线程的话,势必照成程序的响应时间变长,更有可能出现ANR(如果程序5秒钟没有反映的话,系统会弹出一个提示框),严重影响了用户的体验效果。做手机上的图片浏览器需要面对的最大的问题是加载图片的效率问题和浏第2章系统分析与设计4览图片时不会因为图片过多而造成内存溢出,因为手机不同于电
18、脑,手机的内存是非常珍贵的,一旦内存溢出的话程序就会造成异常退出,降低了用户的体验效果。同样,当程序加载图片的速度很慢,而且滑动的时候造成很卡的话同样会降低了用户的体验效果。所以,当用户浏览图片的时候必须异步加载图片,当用户加载的图片到达一定数量后,应该清理掉前面的图片再继续加载图片,以防程序内存溢出。23界面设计231用户界面的设计在人和机器的互动过程(HUMANMACHINEINTERACTION)中,有一个层面,即我们所说的界面(INTERFACE)。从心理学意义来分,界面可分为感觉(视觉、触觉、听觉等)和情感两个层次。用户界面设计是屏幕产品的重要组成部分。界面设计是一个复杂的有不同学科
19、参与的工程,认知心理学、设计学、语言学等在此都扮演着重要的角色。用户界面设计的三大原则是置界面于用户的控制之下;减少用户的记忆负担;保持界面的一致性。电子相册的第一界面是一个欢迎界面,设计图如图21所示图21第一个界面设计图这个界面有两个功能,首先就是展现欢迎界面,给用户一个友好的感觉,其第2章系统分析与设计5次是为软件读取数据提供一个缓冲的时间,提高程序的运行效率。电子相册的第二个界面是一个展现图片所在文件夹的界面,设计图如图22所示图22第二个界面设计图在这个界面,我们可以看到手机中有多少图片的文件夹,每个文件夹下有多少图片,以及文件夹在手机中的地址。电子相册的第三个界面就是图片的具体展现
20、,设计图如图23所示图23第三个页面设计图第2章系统分析与设计6此界面主要是对图片展现的页面布局,采用三列,可以下拉,每页显示的行数根据手机显示屏的大小有所不一样。电子相册的第四个页面就是每张图片的具体的展示了,设计图如图24所示图24第四个页面设计图此界面在手机上实现了多点触控,图片可以放大和缩小,当往左滑时,跳转到下一张图片,当往右滑的时候跳转到上一张图片,当跳转到第一张图片,提示这已经是第一张图片,当跳转到最后一张图片时,提示这已经是最后一张图片。232功能的设计功能设计就是按照产品定位的初步要求,在对用户需求及现有产品进行功能调查分析的基础上,对所定位产品应具备的目标功能系统进行概念性
21、构建的创造活动。功能设计是功能创新和产品设计的早期工作,是设计调查、策划、概念产生、概念定义的方法,也是产品开发定位及其实施环节,体现了设计中市场导向作用。可以采用用户设计和专业设计或二者结合的方式。是以消费者的潜在需求和功能成本规划为依据,设计产品的功能,经过功能的成本核算后,由专业人员进行产品设计并生产,通过定价,开展针对性的营销,使企业跳出产品同质化陷阱。功能设计的依据是市场细分和产品定位理论的深化,市场细分方法有好多种,但归根结底都是以功能细分的。本程序主要就是由四个界面构成,每个界面都有自己要实现的功能,针对每个界面设计功能流程图如图25所示第2章系统分析与设计7图25功能设计流程图
22、从第一界面到第二个界面是不需要交互的,是程序运行的过度阶段,这里主要实现遍历SD卡中的图片这个功能;第二个界面是主界面,这里要实现显示包含图片的文件夹的功能,并且能够显示出文件夹所在的路径;第三个界面是查看文件夹中具体照片的界面,这里要实现异步加载的功能;第四个界面是单张图片的显示,这里要实现多点触控、放大、缩小和切换图片的功能;从此流程图,我们不难发现,本电子相册是一个功能齐全的简单易用的程序。第3章ANDROID开发环境的搭建8第3章ANDROID开发环境的搭建31开发环境搭建需要的软件1JDK6U18WINDOWSI586EXE2ECLIPSESTANDARDKEPLERRWIN32ZI
23、P3ANDROIDSDKWINDOWS15_R1ZIP4ADT插件5ANDROID系统手机一部图片浏览器中的多点触控的功能不能在ANDROID模拟器上测试32ANDROID开发平台的搭建321JDK安装如果你还没有JDK的话,可以去这里下载,接下来的工作就是安装提示一步一步走。设置环境变量步骤如下我的电脑属性高级环境变量系统变量中添加以下环境变量JAVA_HOME值为DPROGRAMFILESJAVAJDK160_18(你安装JDK的目录)CLASSPATH值为JAVA_HOMELIBTOOLSJARJAVA_HOMELIBDTJARJAVA_HOMEBINPATH在开始追加JAVA_HOME
24、BINNOTE前面四步设置环境变量对搭建ANDROID开发环境不是必须的,可以跳过。当然在安装过程要注意一下,360安全卫士可能会提示木马防火墙,大家要选择“允许程序的所有操作”,否则可能会造成JDK安装不完整。JDK的环境变量经配置完成后,可以通过打开命令提示符窗口,输入命令“JAVAVERSION”,看到JAVA版本的信息,来确定安装是否成功。首先点击“开始”,然后点击“运行”,输入“CMD”,按“ENTER”键,然后第3章ANDROID开发环境的搭建9会出现命令提示符窗口的输入界面,输入命令“JAVAVERSION”。当出现类似如图31的画面表示安装成功了图31命令窗口322ECLIPS
25、E的安装打开官网ECLIPSEORG,点击菜单栏上面的DOWNLOAD,选择红框里面的下载,如图,若你的电脑是32位的则点第一个,64位的点第二个,进入下载页面,一般点击红框里面的网址就可以下载了,下载完毕,你会在你保存的地方看到一个压缩包文件,它就是ECLIPSE。右键你下载的压缩包,解压,解压完毕后即可使用,进入文件夹,就可以看到ECLIPSE的启动程序,第一次打开要设置工作环境,你可以选择在别的盘或者默认C盘,点击OK,现在就成功的进入ECLIPSE了。现在还不能进行ANDROID的开发,还要安装其他的组件。图32ECLIPSE首页第3章ANDROID开发环境的搭建10323ANDROI
26、DSDK安装在ANDROIDDEVELOPERS下载ANDROIDSDK_R05WINDOWSZIP,下载完成后解压到任意路径。运行SDKSETUPEXE,点击AVAILABLEPACKAGES。如果没有出现可安装的包,请点击SETTINGS,选中MISC中的“FORCEHTTPS/“这项,再点击AVAILABLEPACKAGES。选择希望安装的SDK及其文档或者其它包,点击INSTALLATIONSELECTED、ACCEPTALL、INSTALLACCEPTED,开始下载安装所选包。在用户变量中新建PATH值为ANDROIDSDK中的TOOLS绝对路径(本机为DANDROIDDEVELOP
27、ANDROIDSDKWINDOWSTOOLS)。图33设置ANDROIDSDK的环境变量“确定”后,重新启动计算机。重启计算机以后,进入CMD命令窗口,检查SDK是不是安装成功。运行ANDROIDH如果出现类似如图34所示的输出,表明安装成功第3章ANDROID开发环境的搭建11图34验证ANDROIDSDK是否安装成功324ADT安装打开ECLIPSEIDE,进入菜单中的“HELP“INSTALLNEWSOFTWARE“。点击ADD按钮,弹出对话框要求输入NAME和LOCATIONNAME自己随便取,LOCATION输入HTTP/DLSSLGOOGLECOM/ANDROID/ECLIPSE。
28、如图35所示图35安装ADT确定返回后,在WORKWITH后的下拉列表中选择我们刚才添加的ADT,我们会看到下面有DEVELOPERTOOLS,展开它会有ANDROIDDDMS和ANDROIDDEVELOPMENTTOOL,勾选他们。如图36所示图36安装ADT组件第3章ANDROID开发环境的搭建12然后就是按提示一步一步NEXT。完成之后,选择WINDOWPREFERENCES。在左边的面板选择ANDROID,然后在右侧点击BROWSE并选中SDK路径,本机为DANDROIDDEVELOPANDROIDSDKWINDOWS。点击APPLY、OK,配置完成。325创建ADT为使ANDROID
29、应用程序可以在模拟器上运行,必须创建AVD。1、在ECLIPSE中。选择WINDOWSANDROIDSDKANDAVDMANAGER2、点击左侧面板的VIRTUALDEVICES,再右侧点击NEW3、填入NAME,选择TARGET的API,SDCARD大小任意,SKIN随便选,HARDWARE目前保持默认值4、点击CREATEAVD即可完成创建AVD注意如果你点击左侧面板的VIRTUALDEVICES,再右侧点击NEW,而TARGET下拉列表没有可选项时,这时候你点击左侧面板的AVAILABLEPACKAGES在右侧勾选HTTPS/DLSSLGOOGLECOM/ANDROID/REPOSITO
30、RY/REPOSITORYXML,如图37所示图37安装ADT组件然后点击INSTALLSELECTED按钮,接下来就是按提示做就行了,要做这两步,原因是在ANDROIDSDK安装中没有安装一些必要的可用包(AVAILABLEPACKAGES)。第4章程序的实现13第4章程序的实现41ANDROID项目的总体架构以及其用途首先,用ECLIPSE新建一个ANDROID项目,项目会自动生成一些目录及文件,如图41所示图41项目文件这些自动生成的目录及文件是组成ANDROID应用程序的必需部分,它们在应用程序中所起到的作用和主题功能如下SRC该目录用来存放项目的源文件,当项目刚创建时,该文件夹中包含
31、ACTIVITY的源文件,以后用户创建的所有源文件也都将存放在该文件夹中。GEN该文件夹中包含一个在创建项目时自动生成的RJAVA文件,该文件是只读文件,不能手动修改。该文件中包含许多静态的类,这些静态类用来表示项目中所有资源的引用。ASSETS包含应用程序需要使用到的视频与音频文件。RES该文件是资源目录,包含项目中的资源文件并将其编译进应用程序。向些此目录中添加资源文件时,会被RJAVA自动记录。该文件夹下会有5个子文件夹DRAWABELHDPI应用程序中使用的图标文件,高分辨率第4章程序的实现14DRAWABELLDPI低分辨率DRAWABELMDPI中分辨率系统会根据模拟器的分辨率自动
32、到这几个文件夹中去寻找对应的图片LAYOUT界面布局文件VALUES包含字符串引用文件STRINGSXMLANDROIDMANIFESTXML项目的总配置文件,用来配置应用中所使用的各种组件,用来设置应用程序所提供的功能以及应用程序使用到的服务和ACTIVITY。DEFAULTPROPERTIES该文件负责记录项目所需要的环境信息,如ANDROID的版本信息等。SRC里面包含的代码即为项目中编写的代码,如图42所示图42SRC包中文件COMISSACTIVITY包中放的是程序视图、监听器、状态模式文件。COMPICTUREDEMO包中放的是程序四个主界面的应用程序组件(ACTIVITY)等文件
33、。COMUTIL包中放的是程序遍历、列表、自定义组件等文件。DADAADAPTER包中放的是程序两种基础数据适配器文件。RES里面包含的就是程序需要用到的资源文件动画,图片,布局等,如图43所示第4章程序的实现15图43RES中文件DRAWABELMDPI文件夹中放的是程序所要用到的背景图片等一些图片。LAYOUT文件夹中放的是程序的每个界面的布局文件。其他文件的用途,如表41所示表41文件列表文件文件的用途GEN文件夹里面的RJAVA文件里面包含了自动生成的资源的ID如图片,布局,动画,布局中的控件等资源ANDROID22文件这就是ANDROID22系统的一个JAR包ASSETS文件夹存放一
34、些如音乐文件,文本文件的资源,但是存在在这里的资源是没有ID的BIN文件夹编译后产生的一些文件以及程序的APK文件ANDROIDMANIFESTXML这个是项目的配置信息,比如ANDROID里面的4大组件就需要在这个XML里面注册PROGUARDCFG这个是混淆器,增加反编译你程序源代码的难度PROJECTPROPERTIES项目的一些配置信息,如该程序是基于哪个ANDROID版本的第4章程序的实现1642功能的实现421第一个界面欢迎界面当一个ACTIVITY在PAUSE时,被KILL之前,它可以调用ONSAVEINSTANCESTATE来保存当前ACTIVITY的状态信息(在PAUSED状
35、态时,要被KILLED的时候),SETCONTENTVIEW就是设置一个ACTIVITY的显示界面,THREAD创建并控制线程,设置其优先级并获取其状态,FINDVIEWBYID是在寻找在XML中定义的指定ID的对象。OVERRIDEPROTECTEDVOIDONCREATEBUNDLESSAVEDINSTANCESTATESUPERONCREATESAVEDINSTANCESTATESETCONTENTVIEWRLAYOUTZZX_LOGINTHREADTHREADNEWTHREADTHISTHREADSTARTZZX_LOGIN_LINEARLAYOUTLINEARLAYOUTFINDVI
36、EWBYIDRIDZZX_LOGIN_LINEARLAYOUTZZX_LOGIN_LINEARLAYOUTSTARTANIMATIONGETANIMATION开启一个后台线程来遍历SD卡里面的图片OVERRIDEPUBLICVOIDRUNGETFILELISTGETFILELISTNEWGETFILELISTLISTGETFILELISTGETFILELISTPUBLICLISTGETFILELISTLISTNEWARRAYLISTLISTGETALLFILELISTENVIRONMENTGETEXTERNALSTORAGEDIRECTORYRETURNLIST以上GETFILELIST方法的
37、作用就是遍历SD里面的所有路径,并返回一个存储了数据的LIST。ARRAYLIST就是传说中的动态数组,GETEXTERNALSTORAGEDIRECTORY来获取外部存储器的根目录,RETURN返回的就是一个包含了所有包含图片的文件夹的路径的LIST。PUBLICLISTGETALLFILELISTFILEFILESTRINGFILENAMEIFFILEISDIRECTORYFORINTI0IARG0,VIEWARG1,INTARG2,LONGARG3ARG1SETSELECTEDTRUETEXTVIEWTEXTVIEWTEXTVIEWARG1FINDVIEWBYIDRIDFILE_NAME
38、STRINGFILE_NAMETEXTVIEWGETTEXTTOSTRINGSTRINGFILE_PATHFILE_NAMESPLIT“INTENTINTENTNEWINTENTMAINACTIVITYTHIS,GRIDVIEWACTIVITYCLASSINTENTPUTEXTRA“FILE_PATH“,FILE_PATH0STARTACTIVITYINTENTLIST_PICTURE_PATHNEWGETFILELISTGETPICTUREPATHFILE_PATH0以上代码中INTENT可以理解为不同组件通信的媒介或者信使,向CONTEXTSTARTACTIVITY或ACTIVITYSTA
39、RTACTIVITYFORRESULT方法传递一个INTENT对象,可以启动一个ACTIVITY,或使得一个已经存在的ACTIVITY去做一些新的事情。LISTVIEW的适配器的代码如下OVERRIDEPUBLICVIEWGETVIEWINTPOSITION,VIEWCONVERTVIEW,VIEWGROUPPARENTMYHOLDERMHOLDERIFCONVERTVIEWNULLCONVERTVIEWLAYOUTINFLATERINFLATERLAYOUTMAIN_LISTVIEW_VIEW,NULLCONVERTVIEWSETSELECTEDTRUEMHOLDERNEWMYHOLDERM
40、HOLDERIMAGEVIEWIMAGEVIEWCONVERTVIEWFINDVIEWBYIDRIDIMAGE_FILEMHOLDERTEXTVIEW_FILENAMETEXTVIEWCONVERTVIEWFINDVIEWBYIDRIDFILE_NAMEMHOLDERTEXTVIEW_FILEPATHTEXTVIEWCONVERTVIEWFINDVIEWBYIDRIDFILE_PATHCONVERTVIEWSETTAGMHOLDER以上代码在GETVIEW中实例化几个CONVERTVIEW,当用户滚动屏幕时,CONVERTVIEW是共用之前的,只是数据项被重新赋值了。第4章程序的实现19PUB
41、LICCLASSMYHOLDERPRIVATEIMAGEVIEWIMAGEVIEWPRIVATETEXTVIEWTEXTVIEW_FILENAMEPRIVATETEXTVIEWTEXTVIEW_FILEPATHPUBLICBITMAPGETIMAGEBITMAPSTRINGPICTURE_PATHBITMAPBITMAPBITMAPFACTORYDECODEFILEPICTURE_PATHRETURNBITMAP以上CONVERTVIEWGETTAG包含了图片的文件夹的路径,GETPOSITION为了获得文件夹的父路径,MYHOLDER是封装类,包含了视图的属性。GETIMAGEBITMAP是
42、用于处理由像素数据定义的图像的对象。功能实现效果图如图45所示图45主界面效果图423第三个界面GRIDVIEW界面异步加载图片如果不异步加载图片的话,那么GRIDVIEW的滑动速度就会相当慢,严重影响了用户体验效果DOINBACKGROUND方法和ONPOSTEXECUTE的参数必须对应,这两个参数在ASYNCTASK声明的泛型参数列表中指定,第一个为DOINBACKGROUND接受的参数,第二个为显示进度的参数,第三个为DOINBACKGROUND返回和ONPOSTEXECUTE传入的参数。将在ONPREEXECUTE方法执行后马上执行,该方法运行在后台线程中。第4章程序的实现20这里将主
43、要负责执行那些很耗时的后台计算工作。可以调用PUBLISHPROGRESS方法来更新实时的任务进度。该方法是抽象方法,子类必须实现OVERRIDEPROTECTEDINTENTDOINBACKGROUNDINTEGERPARAMSIFGRIDVIEWACTIVITYISTOTOPIPARAMS0ISTRINGPICTURE_PATHMAINACTIVITYLIST_PICTURE_PATHGETIBITMAPBITMAPGETIMAGEBITMAPPICTURE_PATH,NEWFILEPICTURE_PATHIMAGEBEANIMAGEBEANNEWIMAGEBEANBITMAP,IPUBL
44、ISHPROGRESSIMAGEBEANELSEFORINTIPARAMS0I122131OPTIONSINSAMPLESIZE2BITMAPBITMAPBITMAPFACTORYDECODEFILEPICTURE_PATH,OPTIONSRETURNBITMAP加载和显示图片是很消耗内存的一件事,BITMAPFACTORYOPTIONS类,允许我们定义图片以何种方式如何读到内存,当图片太大,我们可以使图片变成原来的1/5、1/4或则1/2。判断GRIDVIEW界面当中有多少图片,当超过30张的时候加载前30张,当不超过30张的时候就加载现有的数目。控制图片的加载数量的代码为IFPICTRUE
45、_NUMBER30STARTTHREADTOLOADIMAGE0,30ISFULLPAGETRUEELSESHOW_NUMBERPICTRUE_NUMBERSTARTTHREADTOLOADIMAGE0,SHOW_NUMBERISFULLPAGEFALSE当该页滑动到了底部的话就需要加载下一页的图片了,并且清理掉上一页中的BITMAP。检测GRIDVIEW滑动到底部到达了底部,通过手势事件里面来操控的代码如第4章程序的实现22下把ONTOUCH事件交给GESTUREDETECTOR来处理GRIDVIEWSETONTOUCHLISTENERNEWONTOUCHLISTENEROVERRIDEPU
46、BLICBOOLEANONTOUCHVIEWV,MOTIONEVENTEVENTIFEVENTGETACTIONMOTIONEVENTACTION_UPIFGRIDVIEWGETLASTVISIBLEPOSITIONGRIDVIEWGETCOUNT1VIEWVIEWVIEWGRIDVIEWGETCHILDATGRIDVIEWGETCHILDCOUNT1INTLOCATIONNEWINT2VIEWGETLOCATIONONSCREENLOCATION当两次滑动的时候得到的Y坐标是一样的时候,说明已经到了底部IFPOSITIONLOCATION1ISTOBOTTOMTRUEELSEPOSITION
47、LOCATION1ELSEIFGRIDVIEWGETFIRSTVISIBLEPOSITION0VIEWVIEWVIEWGRIDVIEWGETCHILDAT0INTLOCATIONNEWINT2VIEWGETLOCATIONONSCREENLOCATION当两次滑动的时候得到的Y坐标是一样的时候,说明已经到了顶部IFPOSITIONLOCATION1ISTOTOPTRUEELSEPOSITIONLOCATION1RETURNGESTUREDETECTORONTOUCHEVENTEVENT加载下一页图片的代码时,当下面没有图片的时候,会弹出一个提示语,提示下面没有没有图片了PUBLICVOIDLO
48、ADNEXTPAGEIFIMAGEPAGE130PICTRUE_NUMBERTOASTMAKETEXTGRIDVIEWACTIVITYTHIS,“下面没有了图片哦,亲“,1000SHOW当下一页还有图片的时候,首先应该清掉上一页中的BITMAP,不然会内存溢出,再显示下面图片,如果图片足够加载一整页的话,就显示一整页的图片ELSEIMAGEPAGE第4章程序的实现23GRIDVIEWADAPTERLIST_BITMAPCLEARIFPICTRUE_NUMBERALLLOADIMAGE30STARTTHREADTOLOADIMAGEALLLOADIMAGE,ALLLOADIMAGE30ISFUL
49、LPAGETRUE当图片不够加载一整页的话,重新设置适配器,使得GRIDVIEW重新开始ELSESTARTTHREADTOLOADIMAGEALLLOADIMAGE,PICTRUE_NUMBERISFULLPAGEFALSESHOW_NUMBERPICTRUE_NUMBERALLLOADIMAGEGRIDVIEWSETADAPTERMY_GRIDVIEWADAPTER加载上一页图片的代码时,当没有上一页,就弹出提示信息,提示上面没有照片了,如果有上一页的话,那么上一页肯定是30张了,所以这里加载30张图片PUBLICVOIDLOADLASTPAGEIFIMAGEPAGE0TOASTMAKETEXTTHIS,“上面没有图片了哦,亲“,1000SHOWELSEGRIDVIEWADAPTERLIST_BITMAPCLEARINTHASLOADIMAGEIMAGEPAGE30SYSTEMOUTPRINTLN“需要加载的图片的个数为“HASLOADIMAGEIMAGEPAGEFORINTIHASLOADIMAGE1IHASLOADIMAGE301INTJI6NEWASYNCLOADIMAGEEXECUTEJ,ISYSTEMO
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。