Android中贪吃蛇游戏的学习(四)

文章分类:移动开发

Java代码
  1. packagecom.easyway.dev.android.snake;
  2. importandroid.content.Context;
  3. importandroid.content.res.TypedArray;
  4. importandroid.graphics.Bitmap;
  5. importandroid.graphics.Canvas;
  6. importandroid.graphics.Paint;
  7. importandroid.graphics.drawable.Drawable;
  8. importandroid.util.AttributeSet;
  9. importandroid.view.View;
  10. /**
  11. *Android平台裡,使用者介面都是透过ViewGroup或View类别来显示。
  12. *ViewGroup和View是Android平台上最基本的使用者介面表达单元。我
  13. *们可以透过程式直接呼叫的方法,调用描绘使用者介面,将萤幕上显示的介面元
  14. *素,与构成应用程式主体的程式逻辑,溷合在一起编写。或是,也可以将介面显示
  15. *与程式逻辑分离,照着Android提供的这个较优雅的方式,使用XML描述档,
  16. *来描述介面元件的组织。
  17. *
  18. *在Android系统中,我们使用XML来定义UI。但是有些稍微有经验的开发者可能会有疑问:
  19. *「用XML来描述介面固然方便,但是对于手机程式来说,直接用XML档桉是不是太占空间了?」。
  20. *没错,如果Android是直接使用XML来储存介面描述到手机上的话,一定会佔用比起现在大的多
  21. *的档桉空间。解决的方法是Android并不直接使用XML档桉,而是透过Android开发工具,
  22. *自动将XML描述档转换成资源档桉。一旦应用程式要操作某个介面元件,或是使用任何种类的资源
  23. *(字串、图片、图示、音效...),都使用索引来查询。
  24. *
  25. *
  26. *伟大的创意少之又少,多数时候只是一些小改进。小的改进也是好的。
  27. *
  28. *
  29. *TileView:aView-variantdesignedforhandlingarraysof"icons"orother
  30. *drawables.
  31. *
  32. */
  33. publicclassTileViewextendsView{
  34. /**
  35. *Parameterscontrollingthesizeofthetilesandtheirrangewithinview.
  36. *Width/Heightareinpixels,andDrawableswillbescaledtofittothese
  37. *dimensions.X/YTileCountsarethenumberoftilesthatwillbedrawn.
  38. */
  39. protectedstaticintmTileSize;
  40. protectedstaticintmXTileCount;
  41. protectedstaticintmYTileCount;
  42. privatestaticintmXOffset;
  43. privatestaticintmYOffset;
  44. /**
  45. *
  46. *Ahashthatmapsintegerhandlesspecifiedbythesubclassertothe
  47. *drawablethatwillbeusedforthatreference
  48. */
  49. privateBitmap[]mTileArray;
  50. /**
  51. *声明用来存放绘画图像的x,y轴的位置的数组
  52. *Atwo-dimensionalarrayofintegersinwhichthenumberrepresentsthe
  53. *indexofthetilethatshouldbedrawnatthatlocations
  54. */
  55. privateint[][]mTileGrid;
  56. privatefinalPaintmPaint=newPaint();
  57. publicTileView(Contextcontext,AttributeSetattrs,intdefStyle){
  58. super(context,attrs,defStyle);
  59. TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.TileView);
  60. mTileSize=a.getInt(R.styleable.TileView_tileSize,12);
  61. a.recycle();
  62. }
  63. publicTileView(Contextcontext,AttributeSetattrs){
  64. super(context,attrs);
  65. TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.TileView);
  66. mTileSize=a.getInt(R.styleable.TileView_tileSize,12);
  67. a.recycle();
  68. }
  69. /**
  70. *ReststheinternalarrayofBitmapsusedfordrawingtiles,and
  71. *setsthemaximumindexoftilestobeinserted
  72. *
  73. *@paramtilecount
  74. */
  75. publicvoidresetTiles(inttilecount){
  76. mTileArray=newBitmap[tilecount];
  77. }
  78. @Override
  79. protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
  80. mXTileCount=(int)Math.floor(w/mTileSize);
  81. mYTileCount=(int)Math.floor(h/mTileSize);
  82. mXOffset=((w-(mTileSize*mXTileCount))/2);
  83. mYOffset=((h-(mTileSize*mYTileCount))/2);
  84. mTileGrid=newint[mXTileCount][mYTileCount];
  85. clearTiles();
  86. }
  87. /**
  88. *FunctiontosetthespecifiedDrawableasthetileforaparticular
  89. *integerkey.
  90. *
  91. *@paramkey
  92. *@paramtile
  93. */
  94. publicvoidloadTile(intkey,Drawabletile){
  95. Bitmapbitmap=Bitmap.createBitmap(mTileSize,mTileSize,Bitmap.Config.ARGB_8888);
  96. Canvascanvas=newCanvas(bitmap);
  97. tile.setBounds(0,0,mTileSize,mTileSize);
  98. tile.draw(canvas);
  99. mTileArray[key]=bitmap;
  100. }
  101. /**
  102. *Resetsalltilesto0(empty)
  103. *
  104. */
  105. publicvoidclearTiles(){
  106. for(intx=0;x<mXTileCount;x++){
  107. for(inty=0;y<mYTileCount;y++){
  108. setTile(0,x,y);
  109. }
  110. }
  111. }
  112. /**
  113. *Usedtoindicatethataparticulartile(setwithloadTileandreferenced
  114. *byaninteger)shouldbedrawnatthegivenx/ycoordinatesduringthe
  115. *nextinvalidate/drawcycle.
  116. *
  117. *@paramtileindex图片的索引
  118. *@paramxx轴的位置
  119. *@paramyy轴的位置
  120. */
  121. publicvoidsetTile(inttileindex,intx,inty){
  122. mTileGrid[x][y]=tileindex;
  123. }
  124. /**
  125. *重写VIEW类里面的方法。把界线画出。
  126. *
  127. *地图其实就是由图片数组拼直面成的。面图片又是通过他的图片索引找到,并
  128. *在mTileGrid[x][y],获取他们的位置索引来确定图片的位置。这样在一个
  129. *手机的页面就形成了,
  130. *
  131. */
  132. @Override
  133. publicvoidonDraw(Canvascanvas){
  134. super.onDraw(canvas);
  135. for(intx=0;x<mXTileCount;x+=1){
  136. for(inty=0;y<mYTileCount;y+=1){
  137. if(mTileGrid[x][y]>0){
  138. canvas.drawBitmap(mTileArray[mTileGrid[x][y]],
  139. mXOffset+x*mTileSize,
  140. mYOffset+y*mTileSize,
  141. mPaint);
  142. }
  143. }
  144. }
  145. }
  146. }

更多相关文章

  1. Android中的AutoCompleteTextView的使用
  2. Android(安卓)角标 BadgeView/android-viewbadger使用介绍
  3. [转] 软键盘android:windowSoftInputMode属性使用
  4. Android使用DialogFragment,自定义对话框
  5. MAC上使用maven打android的包,报错:No Android(安卓)SDK path cou
  6. Android使用HttpClient时出现错误:java.lang.NoSuchFieldError: N
  7. Android--ExpandbleView源码学习一---ExpandableListView使用
  8. Android(安卓)Notification的使用
  9. 第12天android:短信发送+测试使用

随机推荐

  1. 关键词final的用途是什么?
  2. .Net JAVA JS 加密(三方互通)
  3. 增强的for循环中局部变量的范围
  4. javaScript函数中执行C#代码中的函数
  5. thinking in java逍遥游记 之 夜的第四章
  6. Maven编译提示:软件包不存在
  7. java 使用jdbc连接Greenplum数据库和Post
  8. ********** javamaill邮箱发送问题 *****
  9. Java对象引用处理机制
  10. java数组和c中数组的区别