Android 实现图片的自动缩放,适应分辨率不同的手机

分类: Android UI Android开发 19人阅读 评论(0) 收藏 举报

以下代码可实现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获取屏幕分辨率及DisplayMetrics简介
  2. Android(安卓)WiFi接口理解
  3. Android加密之文件级加密
  4. [置顶] android 自定义控件
  5. Android(安卓)中自定义View的应用 (自绘TextView) ---- 转
  6. Android(安卓)WIFI 类分析
  7. android之view获取getWidth()和getHeight()
  8. Android(安卓)Animation学习笔记
  9. ANDROID:LISTVIEW 自定义背景

随机推荐

  1. 微信小程序生成分享图片踩坑大计划
  2. BlueStore源码分析之对象IO
  3. dom的增删改查
  4. BlueStore源码分析之Cache
  5. js 轮播图功能:上下翻页,自动播放----0409
  6. Ceph Octopus版本Dashboard新增硬盘闪灯
  7. Ceph CSI 3.1发布
  8. Mybatis plus 整合springboot 出现的Inva
  9. jQuery:常用dom和事件操作,jQuery中的$.a
  10. 谁要是敢用Map传参数,我喵喵就打死他