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

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();


下面是最全面的代码:

  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.   
  14. public class ShuaiBaoView extends SurfaceView implements SurfaceHolder.Callback{  
  15.    
  16.  ShuaiBaoActivity main = new ShuaiBaoActivity();  
  17.    
  18.  //状态  
  19.  public final static int START = 0;//摔炮开始运动  
  20.  public final static int PAUSE =1;//软件暂停  
  21.  public final static int HIT =2;//定义摔炮撞墙是的状态  
  22.  //监听软件状态  
  23.  public  int state = PAUSE;  
  24.  //定义图片  
  25.  public Bitmap imgBao;  
  26.  public Bitmap imgBaoend;  
  27.  public Bitmap imgBaobg;  
  28.  Bitmap dstbmp ;  
  29. // private Animation mAnimationTranslate;//定义平移的动画  
  30.  //定义摔炮位置  
  31.  public int x;  
  32.  public int y;  
  33.  int initX ;  
  34.  public int initY ;  
  35.  private float scalX;  
  36.  private float scalY;  
  37.  //定义摔炮运行速度  
  38.  public int speed = 15;  
  39.  //定义线程的运行参数  
  40.  public boolean isStop = true;  
  41.  SurfaceHolder holder;  
  42.    
  43.  Intent intent;  
  44.  Context context;  
  45.    
  46.  public ShuaiBaoView(Context context,int x,int y) {  
  47.   super(context);  
  48.   // TODO Auto-generated constructor stub  
  49.     
  50.   this.context = context;  
  51.   initY = y-30;//初始化摔炮y轴初始坐标  
  52.   this.x = x/2-5;;//初始化摔炮x轴坐标  
  53.   this.y = initY;//初始化摔炮Y周卓表  
  54.   scalX = x;//保存屏幕宽  
  55.   scalY = y;//保存屏幕高  
  56.   holder = getHolder();//获取holder  
  57.   holder.addCallback(this);  
  58.   Resources res = context.getResources();  
  59.   imgBao = BitmapFactory.decodeResource(res,R.drawable.shuaibao_bao);  
  60.   imgBaoend = BitmapFactory.decodeResource(res,R.drawable.shuaipao_baoend);  
  61.   imgBaobg = BitmapFactory.decodeResource(res,R.drawable.shuaibao_bg);  
  62.   Matrix matrix=new Matrix();  
  63.   matrix.postScale(scalX/imgBaobg.getWidth(),   
  64.     scalY/imgBaobg.getHeight());//获取缩放比例  
  65.   dstbmp = Bitmap.createBitmap(imgBaobg,0,0,imgBaobg.getWidth(),  
  66.     imgBaobg.getHeight(),matrix,true);//按缩放比例生成适应屏幕的新的bitmap;  
  67.   intent = new Intent("com.soundmanagerbao.android.music");  
  68.   setFocusable(true);  
  69.  }  
  70.  public void onDraw(Canvas canvas){  
  71.   super.onDraw(canvas);  
  72.   //绘制图片  
  73.   canvas = holder.lockCanvas(null);//获取画布  
  74.   Paint mPaint = new Paint();//获取画笔  
  75.   //画自适应背景  
  76.   canvas.save();  
  77.   canvas.drawBitmap(dstbmp, 00, mPaint); //画出图片  
  78.   canvas.restore();  
  79.   switch(state){  
  80.   case PAUSE:{//暂停  
  81.     
  82.    canvas.save();  
  83.    canvas.drawBitmap(imgBao, x, initY,mPaint);  
  84.    canvas.restore();  
  85.   }  
  86.   break;  
  87.   case START://开始  
  88.   {  
  89.    canvas.save();  
  90.    canvas.drawBitmap(imgBao, x, y,mPaint);  
  91.    canvas.restore();   
  92.    y-=speed;  
  93.    if(y<=120){  
  94.     state = HIT;  
  95.    }  
  96.   }  
  97.   break;  
  98.   case HIT:{//撞击  
  99.    canvas.save();  
  100.    canvas.drawBitmap(imgBaoend, x, 115,mPaint);  
  101.    canvas.drawBitmap(imgBaoend, x, 115,mPaint);  
  102.    canvas.restore();  
  103.    context.startService(intent);     
  104.    state = PAUSE;  
  105.   }  
  106.   break;  
  107.   }  
  108.   holder.unlockCanvasAndPost(canvas);  
  109.  }  
  110.  class MyThread implements Runnable{//画图,刷新  
  111.   
  112.   @Override  
  113.   public void run() {  
  114.    // TODO Auto-generated method stub  
  115.    while(isStop){  
  116.     Canvas canvas1 = null;  
  117.     onDraw(canvas1);  
  118.    }  
  119.   }  
  120.     
  121.  }  
  122.  @Override  
  123.  public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  124.    int height) {  
  125.   // TODO Auto-generated method stub  
  126.     
  127.  }  
  128.  @Override  
  129.  public void surfaceCreated(SurfaceHolder holder) {  
  130.   // TODO Auto-generated method stub   
  131.   isStop = true;  
  132.   new Thread(new MyThread()).start();//开始线程  
  133.  }  
  134.  @Override  
  135.  public void surfaceDestroyed(SurfaceHolder holder) {  
  136.   // TODO Auto-generated method stub  
  137.   isStop = false;//返回时关闭线程  
  138.  }  
  139.    


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值