Android(安卓)实现图片的自动缩放,适应分辨率不同的手机
16lz
2021-01-26
以下代码可实现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();
下面是最全面的代码:
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.content.res.Resources;
- importandroid.graphics.Bitmap;
- importandroid.graphics.BitmapFactory;
- importandroid.graphics.Canvas;
- importandroid.graphics.Matrix;
- importandroid.graphics.Paint;
- importandroid.view.SurfaceHolder;
- importandroid.view.SurfaceView;
- importcn.com.ldci.madc.firecrackers.R;
- importcn.com.ldci.madc.firecrackers.ui.shuaibao.ShuaiBaoActivity;
- publicclassShuaiBaoViewextendsSurfaceViewimplementsSurfaceHolder.Callback{
- ShuaiBaoActivitymain=newShuaiBaoActivity();
- //状态
- publicfinalstaticintSTART=0;//摔炮开始运动
- publicfinalstaticintPAUSE=1;//软件暂停
- publicfinalstaticintHIT=2;//定义摔炮撞墙是的状态
- //监听软件状态
- publicintstate=PAUSE;
- //定义图片
- publicBitmapimgBao;
- publicBitmapimgBaoend;
- publicBitmapimgBaobg;
- Bitmapdstbmp;
- //privateAnimationmAnimationTranslate;//定义平移的动画
- //定义摔炮位置
- publicintx;
- publicinty;
- intinitX;
- publicintinitY;
- privatefloatscalX;
- privatefloatscalY;
- //定义摔炮运行速度
- publicintspeed=15;
- //定义线程的运行参数
- publicbooleanisStop=true;
- SurfaceHolderholder;
- Intentintent;
- Contextcontext;
- publicShuaiBaoView(Contextcontext,intx,inty){
- super(context);
- //TODOAuto-generatedconstructorstub
- 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);
- Resourcesres=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);
- Matrixmatrix=newMatrix();
- matrix.postScale(scalX/imgBaobg.getWidth(),
- scalY/imgBaobg.getHeight());//获取缩放比例
- dstbmp=Bitmap.createBitmap(imgBaobg,0,0,imgBaobg.getWidth(),
- imgBaobg.getHeight(),matrix,true);//按缩放比例生成适应屏幕的新的bitmap;
- intent=newIntent("com.soundmanagerbao.android.music");
- setFocusable(true);
- }
- publicvoidonDraw(Canvascanvas){
- super.onDraw(canvas);
- //绘制图片
- canvas=holder.lockCanvas(null);//获取画布
- PaintmPaint=newPaint();//获取画笔
- //画自适应背景
- canvas.save();
- canvas.drawBitmap(dstbmp,0,0,mPaint);//画出图片
- canvas.restore();
- switch(state){
- casePAUSE:{//暂停
- canvas.save();
- canvas.drawBitmap(imgBao,x,initY,mPaint);
- canvas.restore();
- }
- break;
- caseSTART://开始
- {
- canvas.save();
- canvas.drawBitmap(imgBao,x,y,mPaint);
- canvas.restore();
- y-=speed;
- if(y<=120){
- state=HIT;
- }
- }
- break;
- caseHIT:{//撞击
- 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);
- }
- classMyThreadimplementsRunnable{//画图,刷新
- @Override
- publicvoidrun(){
- //TODOAuto-generatedmethodstub
- while(isStop){
- Canvascanvas1=null;
- onDraw(canvas1);
- }
- }
- }
- @Override
- publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
- intheight){
- //TODOAuto-generatedmethodstub
- }
- @Override
- publicvoidsurfaceCreated(SurfaceHolderholder){
- //TODOAuto-generatedmethodstub
- isStop=true;
- newThread(newMyThread()).start();//开始线程
- }
- @Override
- publicvoidsurfaceDestroyed(SurfaceHolderholder){
- //TODOAuto-generatedmethodstub
- isStop=false;//返回时关闭线程
- }
- }
更多相关文章
- Android网络数据xml解析
- Android(安卓)解析如何获取SDCard 内存
- Android快速开发框架dyh详解(六)---工具层的使用
- Android(安卓)Sensor 架构深入剖析
- Android(安卓)Sensor框架简述(一)
- Android解析如何获取SDCard 内存
- activity 设置Theme.Dialog View高度
- Android实现网络加载图片点击大图后浏览可缩放
- android中的自定义popupwindow