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 自定义控件
  2. ANDROID:LISTVIEW 自定义背景
  3. Android 中自定义View的应用 (自绘TextView) ---- 转
  4. Android中实现双指缩放的功能
  5. Android 自定义漂亮的Seekbar样式
  6. android 自定义view 前的基础知识LayoutInflater layoutInflater
  7. Android自定义View(1):对话框-Dialog
  8. android 自定义view绘制流程

随机推荐

  1. android 呼吸灯实现源码
  2. Android中使用 MediaExtractor 和 MediaM
  3. Android(安卓)SDK 4.0.3 开发环境配置及
  4. android am命令
  5. Android 经典示例,初学者的绝好源码资料
  6. shape的使用
  7. Android进入页面默认不弹出软键盘
  8. Android Studio 指定DEBUG和RELEASE版本
  9. Android跨进程通信传输大数据
  10. android activity onSearchRequested()