在Android中,项目目录下的"res\drawable" 用来设置该项目的一些图片资源,那么如何来显示这些图片资源呢?Android中提供了Bitmap来存放这些资源,如果大家对android的画图和Animation还不熟悉的话,可以看这里推荐的文章,介绍比较全面 http://byandby.iteye.com/blog/827527

如下代码可以通过一个资源索引获得其图像对象的Bimmap 关于获取图片位图的2种方法请参见这里 http://byandby.iteye.com/blog/828732

Java代码
  1. ((BitmapDrawable)getResources().getDrawable(索引资源)).getBitmap()
((BitmapDrawable) getResources().getDrawable(索引资源)).getBitmap()
这样就可以得到图片资源的Bitmap对象了。

然后使用drawBitmap方法将图片显示到屏幕上。如下代码将一个名为bitmap的Bitmap对象显示在( x , y )坐标上。

Java代码 canvas.drawBitmap(bitmap,x,y,null);
canvas.drawBitmap(bitmap, x, y, null);


Bitmap还提供了一些方法,比如getHeight方法和getWidth方法可以获取这个图片的高度和宽度。下面的示例 将显示怎么使用这些方法。这个示例 实现了 图片移动 可以 上下移动 左右移动,移动到手机屏幕的不同地方。通过手机的上下左右键来控制。我们先来看看运行效果。





下边我们就来看看示例代码吧。
我们一共定义了两个类 其中一个是 Activity01类 用来设置布局
Activity01
Java代码 packagexiaohang.zhimeng;
  1. importandroid.app.Activity;
  2. importandroid.os.Bundle;
  3. importandroid.view.KeyEvent;
  4. publicclassActivity01extendsActivity{
  5. privateGameViewmGameView=null;
  6. @Override
  7. publicvoidonCreate(BundlesavedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. mGameView=newGameView(this);
  10. setContentView(mGameView);
  11. }
  12. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  13. if(mGameView==null){
  14. returnfalse;
  15. }
  16. returnmGameView.onKeyDown(keyCode,event);
  17. }
  18. }
另外一个是我们的GameView类 是我们自己定义的一个View类用来实现 事件的监听,以及图片的移动。
GameView
Java代码
  1. packagexiaohang.zhimeng;
  2. importandroid.content.Context;
  3. importandroid.graphics.Bitmap;
  4. importandroid.graphics.Canvas;
  5. importandroid.graphics.Color;
  6. importandroid.graphics.Paint;
  7. importandroid.graphics.Rect;
  8. importandroid.graphics.drawable.BitmapDrawable;
  9. importandroid.view.KeyEvent;
  10. importandroid.view.MotionEvent;
  11. importandroid.view.View;
  12. publicclassGameViewextendsViewimplementsRunnable{
  13. //声明Paint对象
  14. privatePaintmPaint=null;
  15. //创建两个图片对象
  16. BitmapmBitmapQQ=null;
  17. BitmapmBitDestTop=null;
  18. intmiDTX=0;
  19. intmiDTY=0;
  20. publicGameView(Contextcontext){
  21. super(context);
  22. mPaint=newPaint();
  23. miDTX=0;//代表图片左边的横坐标用来左右移动图片
  24. miDTY=170;//代表图片上边的纵坐标用来上下移动图片
  25. /*从资源文件中装载图片*/
  26. //getResources()-->得到Resources
  27. //getDrawable()-->得到资源中的Drawable对象,参数为资源索引ID
  28. //getBitmap()-->得到Bitmap
  29. mBitmapQQ=((BitmapDrawable)getResources().getDrawable(R.drawable.xh))
  30. .getBitmap();
  31. mBitDestTop=((BitmapDrawable)getResources().getDrawable(
  32. R.drawable.chrysler)).getBitmap();
  33. newThread(this).start();
  34. }
  35. @Override
  36. protectedvoidonDraw(Canvascanvas){
  37. super.onDraw(canvas);
  38. /*清屏效果*/
  39. canvas.drawColor(Color.GRAY);
  40. /*在屏幕(0,0)处绘制图片mBitQQ*/
  41. GameView.drawImage(canvas,mBitmapQQ,0,0);
  42. /*在指定位置按指定裁剪的区域进行绘制*/
  43. //getWidth()-->得到图片的宽度
  44. //getHeight()-->得到图片的高度
  45. GameView.drawImage(canvas,mBitDestTop,miDTX,miDTY,mBitDestTop
  46. .getWidth(),mBitDestTop.getHeight(),0,0);
  47. }
  48. //触笔事件
  49. publicbooleanonTouchEvent(MotionEventevent){
  50. returntrue;
  51. }
  52. //按键按下事件
  53. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  54. //左方向键
  55. if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT){
  56. if(miDTX>0){
  57. miDTX-=4;
  58. }
  59. }
  60. //右方向键
  61. elseif(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT){
  62. if(miDTX+mBitDestTop.getWidth()<320){
  63. miDTX+=4;
  64. }
  65. }
  66. //上方向键
  67. elseif(keyCode==KeyEvent.KEYCODE_DPAD_UP){
  68. if(miDTY>0){
  69. //miDTY+mBitDestTop.getHeight()<450
  70. miDTY-=4;
  71. }
  72. }
  73. //下方向键
  74. elseif(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){
  75. if(miDTY<322){
  76. miDTY+=4;
  77. }
  78. }
  79. returntrue;
  80. }
  81. //按键弹起事件
  82. publicbooleanonKeyUp(intkeyCode,KeyEventevent){
  83. returnfalse;
  84. }
  85. publicbooleanonKeyMultiple(intkeyCode,intrepeatCount,KeyEventevent){
  86. returntrue;
  87. }
  88. //线程处理
  89. @Override
  90. publicvoidrun(){
  91. while(!Thread.currentThread().isInterrupted()){
  92. try{
  93. Thread.sleep(100);
  94. }catch(InterruptedExceptione){
  95. Thread.currentThread().interrupt();
  96. }
  97. //使用postInvalidate可以直接在线程中更新界面
  98. postInvalidate();
  99. }
  100. }
  101. /*---------------------------------
  102. *绘制图片
  103. *@paramx屏幕上的x坐标
  104. *@paramy屏幕上的y坐标
  105. *@paramw要绘制的图片的宽度
  106. *@paramh要绘制的图片的高度
  107. *@parambx图片上的x坐标
  108. *@paramby图片上的y坐标
  109. *
  110. *@returnnull
  111. ------------------------------------*/
  112. publicstaticvoiddrawImage(Canvascanvas,Bitmapblt,intx,inty,
  113. intw,inth,intbx,intby){
  114. Rectsrc=newRect();//图片>>原矩形
  115. Rectdst=newRect();//屏幕>>目标矩形
  116. src.left=bx;
  117. src.top=by;
  118. src.right=bx+w;
  119. src.bottom=by+h;
  120. dst.left=x;
  121. dst.top=y;
  122. dst.right=x+w;
  123. dst.bottom=y+h;
  124. //画出指定的位图,位图将自动--》缩放/自动转换,以填补目标矩形
  125. //这个方法的意思就像将一个位图按照需求重画一遍,画后的位图就是我们需要的了
  126. canvas.drawBitmap(blt,null,dst,null);
  127. src=null;
  128. dst=null;
  129. }
  130. /**
  131. *绘制一个Bitmap
  132. *
  133. *@paramcanvas
  134. *画布
  135. *@parambitmap
  136. *图片
  137. *@paramx
  138. *屏幕上的x坐标
  139. *@paramy
  140. *屏幕上的y坐标
  141. */
  142. publicstaticvoiddrawImage(Canvascanvas,Bitmapbitmap,intx,inty){
  143. //绘制图像将bitmap对象显示在坐标x,y上
  144. canvas.drawBitmap(bitmap,x,y,null);
  145. }
  146. }

更多相关文章

  1. android 笔记 --- 自定义Android主题风格theme.xml方法
  2. Android(安卓)image的示例 拍照显示
  3. Android(安卓)利用Matrix实现图片随手指平移、旋转、缩放
  4. Android中的Selector
  5. android之调用webservice 实现图片上传
  6. 两种特殊TabHost实现
  7. Android游戏框架与常识
  8. Android上传图片到七牛云看这篇就够了
  9. Android(安卓)播放Gif 动画

随机推荐

  1. 如何解析 android 中的 XML?
  2. android 界面布局-各个布局的属性介绍
  3. android sdk 升级出错及解决方案
  4. Pro Android(安卓)4 第五章 理解Intent
  5. WebView及js
  6. Android(安卓)View的属性
  7. android google地图定位开发,且可以自由移
  8. Android(安卓)技术专题系列之十三 -- 与PC
  9. Android(安卓)安全架构及权限控制机制剖
  10. android 电容屏(二):驱动调试之基本概念篇