Android智能电视APP开发笔记(三)图片加载和显示.docx
TVAPP开发笔记(三)图像加载和显示1概述更新有点慢了,主要最近事情比拟多给耽搁了。先要对方案开发的APP作个简洁的描述:这是一个小学英语学习的APP,主要供应课文的阅读和英文内容朗读的功能,相对来说功能比拟简洁。应用场景简洁描述如下:进入APP1、 进入APP,自动装载对应年级(比方三年级上,三年级下,四年级上,四年级下等)的小学英语课文封面(参见卜列图1).(说明:先依据目前应用商店上的APP的做法,不同年级的课文做成不同的APP,符来可以改为一个APP中包含小学全部年级段英文课文的版本)翻页2、 通过手机划屏,或者按界面的“上一页”,"下一页”等按钮可以进展溷页操作,阅读整个英语课文,翻到对应页面,显示对应的页码(如图2,4所示)。3、 点击“页码"可以快捷选择希望进入的页面(如图3所示)。朗读4、 点击“播放"按钮可以播放当前页面的英文内容,依据APP的设置,可以自动只播放当前页面,或者播放所选页面所在Unit,或者播放整篇课文。5、 在朗读状态下,当前页播放完成后,假如是自动朗读下一页的选项,在朗读下一页的同时,页面自动切换到F一页。6、 在明读状态下,进展翻页操作,自动朗读时应页面的内容:7、 在朗读状态下,假如选择"停顿”,自动关闭朗读功能:设置8、 用户点击“设置"按钮,可以进展明读模式的设置:退出9、 用户选择退出APP,假如在朗读状态,自动停顿朗读:主要UI界面如下列图所示:M1842/RcodandwrttVtttfWMoarcCrftfwwcanh4pldo口w-«*.FoO"haGPW*fr*f*fcv*w-<Mlf"SMbi21MMrOwM*WTr64"vrvteUSMWM>11MCrwaMteTtwiftritI.tv<rrO<»<"Q日筒洁对流程进展梳理,界面流程图如下:上一页”,下一页,划砌页(IV:Nwt,prevMMtl其中红色局部是针对Tv须要优化的内容,主要对健值响应。2图像加载和显示技术通过上述分析,首先要实现英语课本的阅读和翻页功能;英语课本最简洁的实现方法是每一页用个图片来显示,具有图文并茂的好处。图片的存储方法可以分为两种,一种方法是存在本地,另外一种方法是存在网络,这两种方法各有利弊:D存在本地:优点是显示效率高,缺点是本地资源占有较大,而且简洁被Copy.不利于版权爱护;2)存在网络:本地资源占用较少,而且可以进展防Copy,但是缺点是受网络带宽影响较大,假如手机湍网络环境不好,就无法显示:本文中的APP的图片用来显示英语课本,理论上存在版本问题,存在本地其实不是特别相宜,采纳网络的方式比拟相宜,在实际操作中还须要考虑版权爱护问题,防止被非法窃取。因为网络方式涉及到WCb网站的搭建,环境搭建相对困难,所以这个阶段先采纳文件的方式实现,在后续产品演进中再论述网络版本的开发。在Android中显示图片常用的控件是ItnageView,在本地通过ImageView显示图片主要:有四种方法:1.图片在工程的res文件夹下面“得到application对象Applicationlnfoapplnfo=getApplicationlnfo();校用程序的包)in!resD-getResources().getdentifier(name,"drawable',applnfo.packageName):代码如下publicBitmapgetRes(Stringname)(Applicationlnfoapplnfo=getApplicationlnfo();intresD-getResources().getldentifier(name,drawabe",appnfo.packageName);returnBrtmapFactory.decodeResource(getResources(),resID):(存放的大同部是一找图片费源和界面的布同文件。drawable和drawabe-,511存放的是各种不同辨别率的图片资源,layout,menu、Xmlti目存放的是软件界面的布局文件,包括菜单、窗口、主界面和设置界面等:放在这里的图像资源可能会被aapt匚具自动地进展无损压缩优化.比方,一个真彩色但并不须要256色的PNG可能公被转换为一个带调色板的8位PNG这使得同等质量的图片占用更少的资源,所以我们得意识到这些放在该书目下的二进制图像在生成时可能会发生改变.殷如你想读取个图像位流并转换成一个位图(bimap),请把图像文件放在resraw书目下,这样可以防止被自动优化要运用这些资源.可以调刖Resources.OpenRawResourceOt)2android中有个ASSCtS书目,这里可以存放只读文件资源获得的方式为InputStreamis=getResources).getAssets().open(name):!assets文件夹里面的文件都是保持原始的文件格式,须要用AssetManager以字节流的形式读取文件.1 .先在Activity里面调用gelAssetsO来获得AssetManager引用。2 .i'plAsseiManager的OPen(SIring,intaccessMode)方法那么指定读取的文件以及访问模式就能得到输入流InputStream.3 .然后就是用己姓openfile的inputstream诜取文件,读取完成后记得i11putStream.cose(),4 .调用ASSetManager.ck>se关闭AssetManager.须要谓意的姐.米向Res。UrCeS和ASSetS中的文件只可以读取而不能进展写的操作)3 .图片放在Slr书目下Stringpath="811VXiangmUtest.png":图片存放的路径InputStreamis=getClass1.oadr().getRsourceAsStream(path);得到图片流(不举荐.在Sre曲目中主要存放源代码文件和配置文件,这个方法也是读取配置文件的方法,Si然也可以用于读取图片文件.但是终究不算好的方法)4 .图片放在SdCard中,通过文件方式读取BitmapimageBitmap-BitmaPFaCtOrydeCode)(Palh是图片的路径,跟竹门是sdcard)(文件读取方式,图片打包在安装包中的,在安装的时候安装到某个书目下,这个书目必定是和APP安装节目枪关的位置程序中可以先独得APP的安装书目,然后获得图片书目,然后在通过这个方法读取文件装我图片)3Android程序发布为了验证各种图像加数和显示技术在最终发布apk程序上的不同,还须要对Android程序的发布有所解,为r简洁起见,目前这个版本先在手机上发布,在将来的局部再来探讨在AndrOid智能电视上的发布,看看两者有啥不同。AndrOid程序发布分为两个步骤,第个步骤生成apk工具,其次步是进展签名.第步可以干脆通过ADT的工具完成,其次步可以通过吩咐的的方式可以用JDK的kctool生专用密钥文件,然后用jarsigner吩咐进展签名)或者ADT工具完成。在这里荷洁操作方法,当然是ADT工具完成啦,具体的操作步骡在下面进展具体描述。4课文读取和翻页功能实现在这里我采纳的是放到res节目的方案:(一)创立工程依据HeIloWorId工程中说描述的方法创立个新的工程AndroidTeStOl:(一)打算图片将英语课文图片复制邹TeSEraWabIC书目F,假如res书目卜没有drawable书目,那就创立个,在这里为了简化,在英语课文图片的命名上定义了个小规那么,前面封面书目之类不须要朗读的局部统一以“img”作为前缀,须要朗读的课文都以"page"为前缀,后面的数字就是页码。如卜.列图所示:/AodrcxiTertOlStrC> kIGewetedJvRIesJMArdroid2.33> MAndrcidDependenciesg>wets。eb> Jm9W4g>FM“£>drw>bk<«9lP9MNjP9二FJo3Jpg二出3彻、P<910iP9:P39ell>gAa92,p9二阳。3刖:Z9X>9口P*95iP9二时9z沁Apago7g9'P*9*8jpg口po9e9jpg()画界面在rcs书目1.翻开lay。Ut书目卜的mail.xml,就是系统的主界面啦,拖一个imageView.几个BUttOn进入,然后设置对应的些网性,如下列图所示的初步界面就搞成了,这里为了简洁,对ImagCViCW的width和height作了定义。SIEjFM泥AndfWdTStolA。心Edrt>119cortfg:d<4uhyc,jjAndrid244.3工nQVGAjPortr!Normel.DyIinW.Th*n*BlR印QQS-InQDIeP>Etr<f*><«,SmAfIB49r3GrphkJU/OMtE三iT099WHc<'TextFiddfUyowtsCOmPOSitelm9<*&MFocrW1dgU*,SrnalTdTlmt&DateTranfitiomAdrJfXdCustom&一nryVieWf右键点击按钮,选择“OIherPrOPCniCS",再选择"AHbyName",最终选择“OnCIiCk",然后输入Click事务的响应函数名称,指定事务响应程序.(假设你已经有IDE环境下的的面对对象编程经验哦,假如没有请先恶补下)(四)写代码看看最终生成的代码:packagechencl.androidtestuitest;importandroid.app.Activity;importandroid-os.Bundle;importandroid.view.4;import;importandroid.widget.ImageView;publicclassAndroidTestOlActivityextendsActivityprivateintCurrPage;Calledwentheactivityisfirstcreated./gOverridepublicvoidonCreate(BundleSavedInstanceState)启动程序super.OnCreate(SavedInstanceState);显示主界面setContentView(R.layout.win);取第一个课文页面的索引号inti三this.getResources().getIdentifier(this.getPackageName()+11:drawable/page2",null,null);找到界面中的IfnageV2wImageViewMyImageView-(IcnageView)this.findViewByld(R.ld.image