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();
下麵是最全麵的代碼:
import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.view.SurfaceHolder; import android.view.SurfaceView; import cn.com.ldci.madc.firecrackers.R; import cn.com.ldci.madc.firecrackers.ui.shuaibao.ShuaiBaoActivity; public class ShuaiBaoView extends SurfaceView implements SurfaceHolder.Callback{ ShuaiBaoActivity main = new ShuaiBaoActivity(); //狀態 public final static int START = 0;//摔炮開始運動 public final static int PAUSE =1;//軟件暫停 public final static int HIT =2;//定義摔炮撞牆是的狀態 //監聽軟件狀態 public int state = PAUSE; //定義圖片 public Bitmap imgBao; public Bitmap imgBaoend; public Bitmap imgBaobg; Bitmap dstbmp ; // private Animation mAnimationTranslate;//定義平移的動畫 //定義摔炮位置 public int x; public int y; int initX ; public int initY ; private float scalX; private float scalY; //定義摔炮運行速度 public int speed = 15; //定義線程的運行參數 public boolean isStop = true; SurfaceHolder holder; Intent intent; Context context; public ShuaiBaoView(Context context,int x,int y) { super(context); // TODO Auto-generated constructor stub this.context = context; initY = y-30;//初始化摔炮y軸初始坐標 this.x = x/2-5;;//初始化摔炮x軸坐標 this.y = initY;//初始化摔炮Y周卓表 scalX = x;//保存屏幕寬 scalY = y;//保存屏幕高 holder = getHolder();//獲取holder holder.addCallback(this); Resources res = context.getResources(); imgBao = BitmapFactory.decodeResource(res,R.drawable.shuaibao_bao); imgBaoend = BitmapFactory.decodeResource(res,R.drawable.shuaipao_baoend); imgBaobg = BitmapFactory.decodeResource(res,R.drawable.shuaibao_bg); Matrix matrix=new Matrix(); matrix.postScale(scalX/imgBaobg.getWidth(), scalY/imgBaobg.getHeight());//獲取縮放比例 dstbmp = Bitmap.createBitmap(imgBaobg,0,0,imgBaobg.getWidth(), imgBaobg.getHeight(),matrix,true);//按縮放比例生成適應屏幕的新的bitmap; intent = new Intent("com.soundmanagerbao.android.music"); setFocusable(true); } public void onDraw(Canvas canvas){ super.onDraw(canvas); //繪製圖片 canvas = holder.lockCanvas(null);//獲取畫布 Paint mPaint = new Paint();//獲取畫筆 //畫自適應背景 canvas.save(); canvas.drawBitmap(dstbmp, 0, 0, mPaint); //畫出圖片 canvas.restore(); switch(state){ case PAUSE:{//暫停 canvas.save(); canvas.drawBitmap(imgBao, x, initY,mPaint); canvas.restore(); } break; case START://開始 { canvas.save(); canvas.drawBitmap(imgBao, x, y,mPaint); canvas.restore(); y-=speed; if(y<=120){ state = HIT; } } break; case HIT:{//撞擊 canvas.save(); canvas.drawBitmap(imgBaoend, x, 115,mPaint); canvas.drawBitmap(imgBaoend, x, 115,mPaint); canvas.restore(); context.startService(intent); state = PAUSE; } break; } holder.unlockCanvasAndPost(canvas); } class MyThread implements Runnable{//畫圖,刷新 @Override public void run() { // TODO Auto-generated method stub while(isStop){ Canvas canvas1 = null; onDraw(canvas1); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub isStop = true; new Thread(new MyThread()).start();//開始線程 } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub isStop = false;//返回時關閉線程 } }
最後更新:2017-04-02 17:28:40