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

以下代码可实现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();


下面是最全面的代码:

  1. import android.content.Context;
  2. import android.content.Intent;
  3. import android.content.res.Resources;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.graphics.Canvas;
  7. import android.graphics.Matrix;
  8. import android.graphics.Paint;
  9. import android.view.SurfaceHolder;
  10. import android.view.SurfaceView;
  11. import cn.com.ldci.madc.firecrackers.R;
  12. import cn.com.ldci.madc.firecrackers.ui.shuaibao.ShuaiBaoActivity;
  13. public class ShuaiBaoViewextends SurfaceView implements SurfaceHolder.Callback{
  14. ShuaiBaoActivity main = new ShuaiBaoActivity();
  15. //状态
  16. public finalstatic int START = 0;//摔炮开始运动
  17. public final static int PAUSE =1;//软件暂停
  18. public finalstatic int HIT =2;//定义摔炮撞墙是的状态
  19. //监听软件状态
  20. public int state = PAUSE;
  21. //定义图片
  22. public Bitmap imgBao;
  23. public Bitmap imgBaoend;
  24. public Bitmap imgBaobg;
  25. Bitmap dstbmp ;
  26. // private Animation mAnimationTranslate;//定义平移的动画
  27. //定义摔炮位置
  28. public int x;
  29. public int y;
  30. int initX ;
  31. public int initY ;
  32. private float scalX;
  33. private float scalY;
  34. //定义摔炮运行速度
  35. public int speed = 15;
  36. //定义线程的运行参数
  37. public boolean isStop =true;
  38. SurfaceHolder holder;
  39. Intent intent;
  40. Context context;
  41. public ShuaiBaoView(Context context,int x,int y) {
  42. super(context);
  43. // TODO Auto-generated constructor stub
  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. Resources res = 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. Matrix matrix=new Matrix();
  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 = new Intent("com.soundmanagerbao.android.music");
  62. setFocusable(true);
  63. }
  64. public void onDraw(Canvas canvas){
  65. super.onDraw(canvas);
  66. //绘制图片
  67. canvas = holder.lockCanvas(null);//获取画布
  68. Paint mPaint = new Paint();//获取画笔
  69. //画自适应背景
  70. canvas.save();
  71. canvas.drawBitmap(dstbmp, 0, 0, mPaint); //画出图片
  72. canvas.restore();
  73. switch(state){
  74. case PAUSE:{//暂停
  75. canvas.save();
  76. canvas.drawBitmap(imgBao, x, initY,mPaint);
  77. canvas.restore();
  78. }
  79. break;
  80. case START://开始
  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. case HIT:{//撞击
  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. class MyThread implements Runnable{//画图,刷新
  104. @Override
  105. public void run() {
  106. // TODO Auto-generated method stub
  107. while(isStop){
  108. Canvas canvas1 = null;
  109. onDraw(canvas1);
  110. }
  111. }
  112. }
  113. @Override
  114. public void surfaceChanged(SurfaceHolder holder,int format, int width,
  115. int height) {
  116. // TODO Auto-generated method stub
  117. }
  118. @Override
  119. public void surfaceCreated(SurfaceHolder holder) {
  120. // TODO Auto-generated method stub
  121. isStop = true;
  122. new Thread(new MyThread()).start();//开始线程
  123. }
  124. @Override
  125. public void surfaceDestroyed(SurfaceHolder holder) {
  126. // TODO Auto-generated method stub
  127. isStop = false;//返回时关闭线程
  128. }
  129. }  

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值