以下代码可实现Android图片按照不同屏幕手机的大小 比例缩放。

1、定义 bitmap

public Bitmap viewBg;// 背景图

2、给他图片资源

viewBg = BitmapFactory.decodeResource(res, R.drawable.shuaibao_bg);

3、就是正事了,自己看吧

canvas.save();
Matrix matrix=new Matrix();
int width = viewBg.getWidth();//获取资源位图的宽
int height = viewBg.getHeight();//获取资源位图的高
float w = scalX/viewBg.getWidth();
float h = scalY/viewBg.getHeight();
matrix.postScale(w, h);//获取缩放比例
Bitmap dstbmp = Bitmap.createBitmap(viewBg,0,0,
width,height,matrix,true);//根据缩放比例获取新的位图
canvas.drawBitmap(dstbmp,0,0, mPaint); //在屏幕上画出位图
canvas.restore();


下面是最全面的代码:

[java] view plain copy
  1. importandroid.content.Context;
  2. importandroid.content.Intent;
  3. importandroid.content.res.Resources;
  4. importandroid.graphics.Bitmap;
  5. importandroid.graphics.BitmapFactory;
  6. importandroid.graphics.Canvas;
  7. importandroid.graphics.Matrix;
  8. importandroid.graphics.Paint;
  9. importandroid.view.SurfaceHolder;
  10. importandroid.view.SurfaceView;
  11. importcn.com.ldci.madc.firecrackers.R;
  12. importcn.com.ldci.madc.firecrackers.ui.shuaibao.ShuaiBaoActivity;
  13. publicclassShuaiBaoViewextendsSurfaceViewimplementsSurfaceHolder.Callback{
  14. ShuaiBaoActivitymain=newShuaiBaoActivity();
  15. //状态
  16. publicfinalstaticintSTART=0;//摔炮开始运动
  17. publicfinalstaticintPAUSE=1;//软件暂停
  18. publicfinalstaticintHIT=2;//定义摔炮撞墙是的状态
  19. //监听软件状态
  20. publicintstate=PAUSE;
  21. //定义图片
  22. publicBitmapimgBao;
  23. publicBitmapimgBaoend;
  24. publicBitmapimgBaobg;
  25. Bitmapdstbmp;
  26. //privateAnimationmAnimationTranslate;//定义平移的动画
  27. //定义摔炮位置
  28. publicintx;
  29. publicinty;
  30. intinitX;
  31. publicintinitY;
  32. privatefloatscalX;
  33. privatefloatscalY;
  34. //定义摔炮运行速度
  35. publicintspeed=15;
  36. //定义线程的运行参数
  37. publicbooleanisStop=true;
  38. SurfaceHolderholder;
  39. Intentintent;
  40. Contextcontext;
  41. publicShuaiBaoView(Contextcontext,intx,inty){
  42. super(context);
  43. //TODOAuto-generatedconstructorstub
  44. this.context=context;
  45. initY=y-30;//初始化摔炮y轴初始坐标
  46. this.x=x/2-5;;//初始化摔炮x轴坐标
  47. this.y=initY;//初始化摔炮Y周卓表
  48. scalX=x;//保存屏幕宽
  49. scalY=y;//保存屏幕高
  50. holder=getHolder();//获取holder
  51. holder.addCallback(this);
  52. Resourcesres=context.getResources();
  53. imgBao=BitmapFactory.decodeResource(res,R.drawable.shuaibao_bao);
  54. imgBaoend=BitmapFactory.decodeResource(res,R.drawable.shuaipao_baoend);
  55. imgBaobg=BitmapFactory.decodeResource(res,R.drawable.shuaibao_bg);
  56. Matrixmatrix=newMatrix();
  57. matrix.postScale(scalX/imgBaobg.getWidth(),
  58. scalY/imgBaobg.getHeight());//获取缩放比例
  59. dstbmp=Bitmap.createBitmap(imgBaobg,0,0,imgBaobg.getWidth(),
  60. imgBaobg.getHeight(),matrix,true);//按缩放比例生成适应屏幕的新的bitmap;
  61. intent=newIntent("com.soundmanagerbao.android.music");
  62. setFocusable(true);
  63. }
  64. publicvoidonDraw(Canvascanvas){
  65. super.onDraw(canvas);
  66. //绘制图片
  67. canvas=holder.lockCanvas(null);//获取画布
  68. PaintmPaint=newPaint();//获取画笔
  69. //画自适应背景
  70. canvas.save();
  71. canvas.drawBitmap(dstbmp,0,0,mPaint);//画出图片
  72. canvas.restore();
  73. switch(state){
  74. casePAUSE:{//暂停
  75. canvas.save();
  76. canvas.drawBitmap(imgBao,x,initY,mPaint);
  77. canvas.restore();
  78. }
  79. break;
  80. caseSTART://开始
  81. {
  82. canvas.save();
  83. canvas.drawBitmap(imgBao,x,y,mPaint);
  84. canvas.restore();
  85. y-=speed;
  86. if(y<=120){
  87. state=HIT;
  88. }
  89. }
  90. break;
  91. caseHIT:{//撞击
  92. canvas.save();
  93. canvas.drawBitmap(imgBaoend,x,115,mPaint);
  94. canvas.drawBitmap(imgBaoend,x,115,mPaint);
  95. canvas.restore();
  96. context.startService(intent);
  97. state=PAUSE;
  98. }
  99. break;
  100. }
  101. holder.unlockCanvasAndPost(canvas);
  102. }
  103. classMyThreadimplementsRunnable{//画图,刷新
  104. @Override
  105. publicvoidrun(){
  106. //TODOAuto-generatedmethodstub
  107. while(isStop){
  108. Canvascanvas1=null;
  109. onDraw(canvas1);
  110. }
  111. }
  112. }
  113. @Override
  114. publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
  115. intheight){
  116. //TODOAuto-generatedmethodstub
  117. }
  118. @Override
  119. publicvoidsurfaceCreated(SurfaceHolderholder){
  120. //TODOAuto-generatedmethodstub
  121. isStop=true;
  122. newThread(newMyThread()).start();//开始线程
  123. }
  124. @Override
  125. publicvoidsurfaceDestroyed(SurfaceHolderholder){
  126. //TODOAuto-generatedmethodstub
  127. isStop=false;//返回时关闭线程
  128. }
  129. }

更多相关文章

  1. Android网络数据xml解析
  2. Android(安卓)解析如何获取SDCard 内存
  3. Android快速开发框架dyh详解(六)---工具层的使用
  4. Android(安卓)Sensor 架构深入剖析
  5. Android(安卓)Sensor框架简述(一)
  6. Android解析如何获取SDCard 内存
  7. activity 设置Theme.Dialog View高度
  8. Android实现网络加载图片点击大图后浏览可缩放
  9. android中的自定义popupwindow

随机推荐

  1. 使用attrs.xml自定义属性
  2. 不得不读的android技术文章【陆续更新】
  3. 快速搭建Android 开发环境-使用ADT Bundl
  4. eclipse android或者Java应用查看jdk路径
  5. android组播开发(2.3.7以下无法正常接收组
  6. andorid 将布局文件(layout)转换为图片(Bit
  7. android创建googlemap基础教程和画导航线
  8. Android 简单例子以及入门学习资料链接
  9. Android——studio入门
  10. Android数据库应用(《Android开发入门与