欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2023年android创新实验报告.pdf

    • 资源ID:88933442       资源大小:5.51MB        全文页数:66页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2023年android创新实验报告.pdf

    项目编号了 海 工 彳 吴 枚4/孝Shanghai University of Engineering Science创新实验报告实验项目名称 基于A ndr。id手机操作系统的游戏软件开发学 生 姓 名 _ _ _ _ _ _ _ _ _ _ _ _ _ 石皓程樊峰辰_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学 生 学 号 _ _ _ _ _ _ _ _ _/_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _所 在 学 院 _ _ _ _ _ _ _ _电子电气工程学院_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _指 导 教 师 施一萍目录一、实验目的二、实验方案2.1 总体设计思想2.2 实验流程(环节)2.3 实验环境2.4 实验分工三、实验过程3.1Andriod软件开发环境搭建3.2 模块划分3.3 游戏主界面模块3.4 游戏控制模块3.5 模块实现原理3.51 游戏界面模块实现3.52 游戏控制模块实现3.6游戏界面具体实现3.6 1蛇身、食物和墙的实现3.6 2 解决键盘事件3.6 3 Til eView类的设计3.6 4 S n a k e View 类的设计3.65 Re f r e shHan d 1 e r 类的设计3.7 程序调试与运营四、实验结果和分析五、参考文献六、附录一代码清单七、附录二环境搭建和运营一.实验目的贪吃蛇游戏一款非常经典的手机游戏,由于它比较简朴有趣,无论老少都比较适合。贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。贪吃蛇游戏的设计比较复杂,它涉及面广、牵涉方面多,假如不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。因此,如何设计和开发好这个贪吃蛇游戏,对于提高Ja v a 开发水平和系统的设计能力有极大的帮助。在设计开发过程中,需要解决好各个类之间的继承关系,还要解决各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。本项目在And r o i d 平台下,使用Java语言,And r oid开发技术开发一款界面和谐,功能齐全的贪吃蛇游戏。二.实验方案2.1总体设计思想本软件是针对贪吃蛇小游戏的JAVA程序,运用上、下、左、右方向键来改变蛇的运动方向,长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运营游戏,在到达固定的分数后,游戏速度会加快。2.2 实验流程Java编程语言Andro i d软件的开发环境搭建(Eclipse开发软件、A n dr o id SDK开发框架、Android D e velo p m e n t Too 1 开发环境)Androi d程序的框架结构游戏软件的开发2.3 实验环境实验地点在实训楼1号楼计算中心。计算中心具有较好的实验设备,拥有较高配置的PC机300台(In t e 1酷睿2 Q8300四核解决器、2 G内存),都可以接入校园网和Inter网,完全能满足该创新实验项目的需要。2.4 实验分工李 琦:环境的搭建和游戏的编译邵峻韬:截图和后期的制作三.实验过程3.1Andriod软件开发环境搭建采 用e c lip se开发工具浣在w i n d o w s 7下进行,基于安卓2.2操作系统。环境搭建:1.JD K安装2.Eclips e 安装3.A n dr o i d SD K安装4.A D T安装创建AVD软件总体设计工程中涉及4个A c tivity,分别为S nake(主界面)、Game(游戏界面)、Hei p(游戏说明界面)、Aut h o rVi e w(作者信息界面),通过不同Activ i t y之间的转换实现不同界面之间的切换。S nak e(Activity)继承了 SnakeView类,Snak e Vi e w 类继承了 Ti 1 eVi e w 类。Tile View 类继承了 Vi e w 其实 Snak e的工程蛮简朴的,源文献就三个:Sn a ke.j a v a S n akeVi e w.j a vaTileVi e w.javao Snake类是这个游戏的入口点,T i t leView类进行游戏的绘画,SnakeVi e w 类则是对游戏控制操作的解决。C o ordinal e,Refr eshH andler是 2 个辅助类,也 是 S n akeVi e w 类中的内部类。其中,C o o r di n ate 是一个点的坐标(x,y),R e freshHandle r 将 RefreshHan d ler 对象绑定某个线程并给它发送消息。如下图:ViewActivity#onCreateO:void#onRestartO:void#onStartO:void#onResumeO:void#onPauseO:void#onStopO:void#onDestroyO:void#onSavelnstanceStateO:voidZXSnakemSnakeView:SnakeVlewICICLE KEY:String=snake-vleW#onSizeChangedO.void#onDrawO:void onKeyDownO-void invalidate。:voidTileView#mTileSize:int#mXTileCount:Int#mYTileCount:int-mXOffset:int-mYOffset:int-mTileGrid:intflO+resetTilesO:void+loadTileO:void+clearTHesO:void+setTileO:voidSnakeView-mRedrawHandler:RefreshHandler-initSnakeViewO-void-initNewGameQ:void-coordArrayUstToArray0:into+saveStateO:void、-coordArrayToArrayListO:void+restoreStateO:void+setTextViewO:void+setModeO i void-addRandomAppleO void updateO void-updateWallsO:void-updateApplesO:void-updateSnakeQ:voidHandler dispatchMessageO:void+handleMessageO:void+hasMessageO:void+obtainMessageO:void postO:void removeMessageO:void+sendMessageO:void+sendMessageDelayedO:void3RefreshHandler+sleepQ:void图 3.13.2模块划分从面向对象程序设计的角度,本项目总体地可以分为游戏界面模块、数据存储模块和控制模块。如下图所示:余 竹 蛇 游 曲图M 2游我放体模块3.3游戏主界面模块游戏界面主框架重要涉及游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。游戏界面主框架的重要结构图如图3.3所示。阅Q Q淤护土里而3.4 游戏控制模块游戏控制模块重要通过手机键盘上的按钮来控制游戏的开始、游戏的暂停、游戏的退出这三个功能以及控制游戏分数变化。在这个模块中,需要给各个按钮添加响应事件代码,来对上述的功能加以进一步的实现。游戏控制模块的重要框架如图3.4所示。图3.4 游戏控制模块框架3.5模块实现原理3.5.1 游戏界面模块实现1 .实现游戏背景本游戏采用Acti v ity作为游戏背景的载体,在 Android中一个 Activi t y 就相称于windows中的一个窗口,Activity上可以放置许多类型的控件。一个activ ity重要有三个状态:当在屏幕前台时(位于当前任务堆栈的顶部),它是活跃或运营的状态。它就是相应用户操作的a c tiv ity。当它失去焦点但仍然对用户可见时,它处在暂停状态。即是:在它之上有此外一个activity。这个a ctivity也许是透明的,或者未能完全遮蔽全屏,所以被暂停的acti v ity仍对用户可见。暂停的activity仍然是存活状态(它保存着所有的状态和成员信息并连接至窗口管理器),但当系统处在极低内存的情况下,仍然可以杀死这个activ i ty0假如它完全被另一个a c t iv i ty 覆盖是,它处在停止状态。它仍然保存所有的状态和成员信息。然而它不在为用户可见,所以它的窗口将被隐藏,假如其它地方需要内存,则系统经常会杀死这个a c tivityo假如一个a c tivi t y 处在暂停或停止状态,系统可以通过规定它结束(调用它的 f i nish()方法)或直接杀死它的进程来将它驱出内存。当它再次为用户可见的时候,它只能完全重新启动并恢复至以前的状态。当 一 个ac t ivity从这个状态转变到另一个状态时,它 被以下列prot e c t e d方法所告知:v oi d o nCr e ate(Bundle s ave d I nst a nceS t ate)、void o n S t art()、v o id o n Re s tart()、void onResume()、vo id on Pa u se()、vo id o n Stop()、v oid onDes t r oy()2.实现蛇的身体蛇可以看做是一个个节点组成的,因此可以用一个链表来存储蛇身的元素,在画蛇时遍历这个链表讲里面的元素一一画出,这样就实现了一条蛇.3.实现蛇的移动用一个timer(定期器)来不断地刷新游戏画面,每刷新一次就再蛇头的前面(链表的尾部)增长一个新元素,同时把蛇尾的一个元素删掉,这样从视觉上看起来就实现了蛇的移动.4.实现蛇吃食物。蛇移动的过程中假如蛇头的坐标与食物出现的坐标重合了,那么就在蛇头的位置增长一个元素同时不删除蛇尾的最后一个元素,这样蛇每迟到一个食物。身体就会变长一截.3.5.2游戏控制模块实现1.实现操作蛇的移动方向在An droid系统中,手机上的每个按钮都会有一个相应的键值跟它相应,所在可以给相应的按钮设立监听器0 n Cli c k L i s te n er,监听器是一个接口,该接口中有一个方法onCli c k(View v)。当按钮被点击的时候系统会自动调用该监听器 的onClick(View v)方法。所以实现游戏控制的具体代码将被写到该方法中。由于本游戏中不允许蛇向与蛇头相反的方向移动,所以当用户操作时需要判断用户操作的方向是不是跟规则冲突,若冲突则无视该操作,若不冲突则响应当操作,所以需要用一个变量来记录蛇头的当前方向。2.实现游戏暂停在A c tivity的生命周期中,有一个onPau s e()方法.该方法在Activity变得不可见的时候被系统自动调用.在玩游戏过程中,假如有来电或是其它事件中断,这时应当把当前状态保存。以便返回时,还可以继续玩游戏。这就使用。nSa v e Ins t an c eSta t e实现保存当前状态。3.实现游戏恢复Ac t ivity生命周期的onRe s um e()方法.该方法在Act i v ity从不可见的状态下变得可见时被系统自动调用.在用户接完电话或者在暂停状态下触摸屏幕后可以在该生命周期方法中对游戏进行恢复.4.实现游戏退出当一个Activity退出或者被调用fi ni sh()方法后,系统会调用其生命周期方法onDestroy().当用户退出游戏时,可以在这个方法中对资源进行释放.3.6游戏界面具体实现3.6.1蛇身、食物和墙的实现前面已经提过,蛇身的数据用一个链表来存储,具体我使用A rra y L ist来实现。蛇身的每个元素、食物和墙都是一个坐标对象,画这些东西的时候只需要把它们的坐标传给画的方法就行了。这里需要引进一个坐标类Coordin a te,这是一个涉及两个参数,用于记录X轴和Y轴简朴类,其中涉及一个比较方法,该方法用于判断蛇头于食物或者墙是否重合.该类的代码如下:c l a s s C o o r d i n a t e p u b l i c i n t x;p u b l i c i n t y;p u b 1 i c C o o r d i n a t e (i n t n e w x,i n t n e w Y)x =n e w x;y =n e w Y;p u b l i c b o o l e a n e q u a l s (C o o r d i n a t e other)i f (xo t h e r.x&y =o t h e r,y)r e turn tr u e;)retu rn f a 1 s e;p u b lic S t r i n g t o S t r i n g ()retu rn ”C o o r d i n a t e:H+x +”,”+y)蛇身的初始长度我设立为5,new 5个C o o r dinat e的对象放入A r rayLi s t中。整个屏幕可以看做是有很多个网格组成的,而蛇就在这些网格中移动。用一个二维数组i n t mTi 1 eG r i d来存储网格的坐标,将蛇身、食物或者墙的坐标传到该数组中,onDraw方法按照该数组中的坐标将屏幕相应位置的网格填充成位图。画蛇身、食物、墙的方法为:pu b l i e v o id o n D r a w (C a n v a s c a n v a s )su p e r.o n D r a w (c a n v a s );fo r (i n t x=0;x mXTile Cou n t;x+)f o r (in t y =0;y 0)c a n v a s .d r a w B i t m a p (m T i l e A r r a y m T i1 e G r i d x y ,mXO f fset+x *mTileS I ze,o m Yof f se t+y *mTil e S i ze,o m P a i nt);3.6 .2 解决键盘事件使用V i e w 类的o n K e y D o w n 方法,该方法由系统监听调用。根据按键的值解决响应事件,该方法中解决了反向移动的问题。m D i r e c t i o n 为当前蛇头的方向,m Ne x t D i r e ct i o n 为按键相应的方向,按键按下后会先判断当前方向是否跟下一方向相反,若相反则不响应事件。具体代码如下:p u b lic b o o lean o n K e y D o w n (i n t k e y C o d e,K e y E v e n t m s g)(i f (k e y C o d e =K e y E v e n t.YCODE_DPAD_UP)i f (m M o d e =READY m M o d e =LOSE)i n i t N e w G a m e ();s e t M o d e (7?UNN I NG);u p d a t e ();r e tu r n(t r u e);)i f (m M o d e =PAUSE)s e t M o d e (RUN N I NG);u p d a t e ();re t urn(tr u e);)i f (m D i r e c t i o n !=S OUTH)m N e x t D i r e c t i o n =NORTH;)r e t urn(tr u e);i f (keyC o de=KeyEvent.K E Yc ODE_DPA D_ DOWN)i f (mD i re c tio n !=NORTH)mNextD i r e c t i o n=S O UTH;)r etu rn (tr u e);i f (k eyCode=Ke y E ve n t.KEYCODE_ DPAD_LEFT)i f (m Direc t ion!=EAS T)mNext D i r e ct ion=WE S T;r etu rn (t r u e);)i f (keyCode=K ey E vent.KEYCODE_ D PAD_RIGHT)i f (m D i r ectio n !=WEST)m N extD irectio n=EA S T;r e t u rn(t r u e);re t ur n s uper.on Ke y D own(k e yC o d e,m sg);if(di r ec t ion!=currentDirecti o n)&!n ee d Update)/取出列表中的最后一个元素(蛇的头部)WormLi n k s 1 =(WormLink)wo r m.1i n t x=si.g etE n dX();int y=sl.g e tEn d Y();/不同的运动方向坐标的改变也不同样switch(d ire c tio n)(ca s e UP:/当这段向上运动的时候if(c u rr e n t D irection!=DOWN)y-;n e edUpdate=tr u e;b reak;c a s e DOWN:/当这段向下运动的时候if(c urre n tDirec t ion!=UP)y+;nee d U p da t e=t r ue;b reak;case LEFT:/当这段向左运动的时候if(c urrentD i r e c tion!=R I GHT)x-;n e edU p date=tru e;bre a k;case R I GHT:/当这段向右运动的时候if(c urrentDir e ction!=LEFT)x+;ne e d Update=true;b r e ak;/当更改方向后需要更新i f(needUpda t e=t r ue)worm.addElem e n t(n ew W o rmLin k(x,c u r r en t Dir e c t io n=d ir e c tion;a stEl e m e nt();y,0,d i re c t i o n);3.6.3 T i leView 类的设计T ileVi e w是游戏的界线,即蛇头若触碰到界线则游戏结束。由于界线也需要被现实到屏幕上,所以T i leView需 要 继 承an d r oid.v iew.View类。and r oid.view.View类是描绘块状视图的基类。Vi e w会绘制一个包含D r aw i ng是event事件的方形块。V i ew是所有与用户交互的组件的Wi d get s的基类(Butto n s,te x tFi e Id 等),Vi e w 的子类 ViewGrou p 是 lay o u t s 类的基类,1 ayo uts类可以包含其他的View/ViewG r o u p组件并且定义展示的属性。实现一个View,1方面需要实现框架中一些所有V i e w s公用的方法。不必重写所有所有的方法,可以仅仅重写onD r aw(andr o i d.graphics.C a nvas)3.6.4 S n a k e View类的设计SnakeView是本游戏的业务逻辑类,该类中包含了游戏数据和一些解决数据的方法以及一些内部类。Sn a keVi e w的方法摘要:1、判断按键的方法在A ndroid手机上,每个按键都会有一个唯一的键值与它相应,可以通过获得键值来判断哪个键被按下了并采用相应的动作。2、设立提醒信息的方法通过程序判断动态地设立用户提醒信息,如游戏结束。3、在随机位置出现食物的方法通过随机数在屏幕范围内随机出现一个食物,但是不允许同一时刻有两个食物存在。4、刷新蛇的当前位置的方法重要用于刷新蛇的当前位置5、判断蛇是否吃到食物的方法由于食物和蛇都会有一个坐标,所以可以通过判断蛇头坐标是否跟食物坐标相等的方法来判断蛇是否吃到了食物。3.6.5 Refre s hHan d le r 类的设计RefreshH a n d le r类需要解决是否需要重绘S n a k e,所以需要继承继承andr o i d.o s.Handler 类。Handle r 类允许你发送和解决和当前Mes s a g e Q u e u e 相关的Mess age类和R u n n abl e 类。每一个Handler类都和一个唯一的线程(以及这个线程的Mes s ageQueue)关联。当你创建一个新的Handler类的时候,它就和创建它的Th r ea d/M e s s a geQueu e 绑定,也就是说这个Hand 1 e r 类会向它所关联的Mess a ge Q ue u e 递送Message s/Runna b les 并且在该M e ssa g e/Run n a b 1 e从Messa g eQu e ue 出列时候执行它。在这里我用来调度也许会被执行的Messag e s 和 Runnableso3.6.7逻辑解决并 饴图3.53.7程序调试与运营游戏功能测试通过在模拟器上的测试,本软件能书案例实现其功能,达成了小蛇在屏幕上的移动,小蛇吃苹果,苹果随机出现的功能,当小蛇头尾相撞或与墙相撞时,游戏结束.这些均在测试中得到验证。(2)游戏控制测试在测试过程中,也着重对游戏的控制功能进行了测试,游戏是通过方向键的控制来实现的,在游戏刚开始的阶段,上下左右四个方位的控制都很成功,但随着蛇移动的速度越来越快,按键的控制反映会出现滞后,通过度析,也许是由于蛇的运动速度超过了键盘的反映速度导致的,与软件无关,所以得出结论,游戏的控制设计也是成功的。(3)游戏界面测试游戏运营之后,就是在画面中出现蛇和两个苹果的初始位置,并且是静止的,并且在画面上还会出现操作提醒“按上键开始游戏”,游戏运营过程中,除了蛇的运动之外,界面大题没有变化,分别由绿色矩形块的围墙,黄色矩形块的苹果和红色矩形块的蛇身(蛇头为黄色)组成。游戏结束后,界面处在暂停状态,提醒游戏结束并显示分数。(4)测试结果通过对游戏软件的功能测试,控制测试和界面测试。具体说是对游戏的开始新游戏、退出、查看最高成绩、计时、记录分数等功能进行测试,并测试程序的鼠标点击事件、菜单的响应及按键响应等事件,结论是该游戏软件能正的确现功能规定。规定输出的效果与预期的输出效果完全一致。锡 BJj偏二 9:19O *SnakePress Up To Play图3.6游戏前画面图3.7游戏中界面图3.8游戏结束时画面四.实验结果与分析(1)测试结果通过对游戏软件的功能测试,控制测试和界面测试。具体说是对游戏的开始新游戏、退出、查看最高成绩、计时、记录分数等功能进行测试,并测试程序的鼠标点击事件、菜单的响应及按键响应等事件,结论是该游戏软件能正的确现功能规定。规定输出的效果与预期的输出效果完全一致。(2)分析回顾这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。在这次设计的同时,我又从中学到了许多东西。但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许尚有很多的局限性,有些模块做得不是很好,界面的设计及整体的布局还比较简朴,没有突出特色出来,这也也许是我这个系统的局限性之处,在这里也恳请老师可以对我的作品指明局限性并加以改正。我所做的设计功能并不算强大,但是这些结合了本学期所学习的内容,重要是界面的设计,并改写了两个类。通过自己写代码,我更进一步清楚了 an d ro i d工程的框架及设计的环节,以及每个文献的作用,稍微掌握了一些V i e w类的方法,同时也学到了更多的界面设计的方法,比如如何实现一个TextView里显示多行数据,如何自定义视图等。但同时我也碰到了问题,比如在编写控制模块代码的时候,如何何时按键监听这一块让我很头疼,此外在设计界面整体布局的时候,如何编写XML文献,这也是很大的问题后来通过查阅资料,对这些问题都做到了很好的解决总之,在这一次的课程设计过程中,我查阅了大量的资料,对J a v a有了一点初步的结识,对于软件工程这些辅助性的教材也巩固了不少,为我这次的课设提供了很大的帮助,锻炼了我的能力让我掌握了一门新的程序设计语言:java语言,系统地学习了数据库方面的知识,并更进一步提高了我在程序设计、调试方面的技巧。更重要的是,它还让我结识到了自己的局限性,在编程方面,我仅仅是刚刚入门而已,以后的道路任重道远,需要我不断的丰富自己、充实自己,这样才干在程序设计方面有所收获。五、参考文献:1沈泽刚,秦玉平.Ja v a 语言程序设计 M.清华大学出版社,2023 2陈昊鹏 同译者作品.Java编程思想(第 4版).机械工业出版社,20 2 3 3 耿祥义,张跃平.J a v a 实用教程(第三版).清华大学出版社,2023六、附录一代码清单Ti 1 tV i ew.java/*Copyright(C)2023 T h e An d roid O p e n Sou r c e P roje c t*Lie e ns e d under the A p ac h e Lie e use,Ve r s ion 2.0(th e License”);*you ma y n ot use th i s f i l e exc e p t in comp 1 i a n c e w i th t h e Li c ense.*You may ob t ain a c o p y of the L i c e n se at*Un 1 e ss re q uir e d by a ppi i cable 1 a w or a gr e e d t o in w r i tin g,soft w are*d istribut e d under th e L i cens e i s d i s t ributed o n a n AS IS B ASIS,*V V I THOUT WA R R A N TIES OR CON DITIONS OF AN Y KIND,ei t her e x press or implied.*See t he Li c ens e f or t he s pec i f i c 1 ang u age g o v erning permissions an d*limita t io n s under th e Licen s e.*/p a c k a ge com.e x am p le.an d roid.snake;import andr o id.con t ent.C o n t e x t;impo r t androi d.conte n t.res.T y pedA r ra y;i mp o r t and r o i d.gr a phi c s.B itmap;i mport and r o id.g ra p hie s.Canva s;i m p o rt andr o id.gr a p hies.P aint;import android.graph i c s.drawa b 1 e.Drawabl e;i mpor t andro i d.util.Att r ib u teSet;import android,v i e w.View;/*Til e V iew:a V ie w-v ariant des i g n e d for ha n d 1 in g arra y s of icons”or othe r*dr a wabl e s.*/pub 1 i c class Tile View exten d s View/*Para mete r s cont r oil i ng t he size of th e til e s and their rang e wi t hin vi e w.*W i dth/Hc i g ht a r e in pixe I s,a n d Drawables wil 1 be sea 1 cd t o fit t o t h es e*dimensi o ns.X/Y T i le Coun t s a r e t he number of til e s that wi 1 1 be drawn.*/pro t ecte d st a tic i nt mT ileSize;p r ot e c t e d sta t i c i n t mX T i 1 eCoun t;pr o tec t ed s t a t i c i nt mYTi 1 e Count;priv a te s t atic i n t mXO f fset;pr i vate stat i c int m Y Offs e t;/*A ha s h that maps i n t e ger hand 1 e s s pec i fie d by t h e su b c I a sser to t h e*draw a b 1 e that w i l l b e used for that r ef e re n ce*/p rivate Bitm a p m TileArray;/*A tw o -d i mens i onal a r ray of int e g e rs i n wh i ch th e n u mber r e presentsth e*i n dex of the til e th a t s ho u Id be d ra wn a t t hat 1 ocation s*/privateint口 mTileGrid;p ri v ate f i nal Pain t niP a in t=new Pai n t();p u bl i c T i I e Vic w(C ont e x t c o n te x t,A t tributeSe t attrs,in t de f Styl e)su pe r(c o n t e x t,a t tr s,de f S t y 1 e);T y pedA r r ay a=contex t.ob t ain S ty 1 edAt t rib u t e s(at t rs,R.s tyleab 1 e.Tile V i ew);mT i 1 e S i ze=a.g e tin t(R.st y leab 1 e.TileV i cw_ t ileS i z e,1 2);a.r e cycl e();)public TileView(C o n t e x t c o n text,AttributeSet attr s)s u pe r(context,a t t r s);T y ped Array a=conle x t.o b tai n S tyledAttributes(a t trs,R.st y 1 e abl e.Ti 1 eView);mT i 1 e S i z e=a.getlnt(R.s t yleab 1 e.TileVi e w_tileS i ze,1 2);a.rcc y cle();/*R e st s t he int e r n a I a r ra y o f Bi t maps used for drawin g t ile s a nd*s e t s th e max i m u m i n de x of t il e s to be in s er t e d*p a ram tilecoun t*/p u blic void r e s et T iles(i n t tileco u nt)mTil e Ar r ay=new Bitmap til e count;)Overridep ro t ec t e d void onSiz e Cha n ged(int w i nt h,int o 1 d w,i n t oldh)mXT i ieCount=(int)Ma t h.floor(w/mTileSize);niYTileCou n t=(i n t)Math.floo r(h/niT i leS i z e);mX 0 f f set=(w-(mT i Ie S iz e*mXT i IeCount)/2);mY O ffset=(h-(mTi 1 e S i z e*mYTileCou n t)/2);mTileG r id=n ew intmXT i 1 e Count mY TileCount;c 1 earTiles();)/*Fu ncti o n to set the s p e c i fied D r awab 1 c a s the tile fo r a pa r ticula r*in t e g e r k ey.*pa r a m key*p aram t ile*/p u b lie v o i d load T i 1 e(i nt key,D raw a bl e t i le)Bitmap bi t map=Bitm a p.crea t eBi t ma p(mTi 1 eS i ze,mTile S i ze,B i tma p.Conf ig.ARGB_8 8 8 8);Canvas c a n va s=n ew Canvas(bi t map);t ile.s e tBo u n ds(0,0,mTileSiz e,mTi 1 e Size);t i le.draw(c anva s);m T ileA r r ay key=bitmap;)/*Resets all til e s to 0(enip t y)*/pu b 1 ic v oid c 1 e a r T il e s()fo r(int x=0;x mXTil e Coun t;x+)for(int y=0;y mY T i leCo u n t;y+)setTile(0,x,y);)/*Use d to i n dicat e that a p ar t icular tile(s e t with 1 o adTile and r e fer e need*by a n in teg e r)shoul d be drawn a t th e gi v en x/y co o rd in a t es du r ingt h e*next i nva 1 idat e/draw cy c I e.*pa r am t ilei n dex*par a m x*p aram y*/publ i c void s e tT i 1 e(int ti 1 cind e x,int x,int y)mTileG r i d x y=t i l e i n d e x;)Over r idepubl i c void o n D raw(Can v a s canva s)su p er.onDraw(canvas);for(in t x=0;x mX T i leCount;x+=1)fo r (int y=0;y 0)canv a s.drawBitmap(niTil e Arr a y mTi 1 eGrid x y mXOffset+x*m T ileSize,niYO f fse

    注意事项

    本文(2023年android创新实验报告.pdf)为本站会员(文***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开