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;//返回时关闭线程
 }

}
时间: 2025-01-21 01:51:48

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

基于Android 实现图片平移、缩放、旋转同时进行_Android

前言 之前因为项目需求,其中使用到了图片的单击显示取消,图片平移缩放功能,昨天突然想再加上图片的旋转功能,在网上看了很多相关的例子,可是没看到能同时实现我想要的功能的. 需求: (1)图片平移.缩放.旋转等一系列操作后,图片需要自动居中显示. (2)图片旋转后选自动水平显示或者垂直显示 (3)图片在放大缩小的同时都能旋转 Demo实现部分效果截图 Demo主要代码 Java MainActivity.java package com.practice.noyet.rotatezoomimagev

基于Android 实现图片平移、缩放、旋转同时进行

前言 之前因为项目需求,其中使用到了图片的单击显示取消,图片平移缩放功能,昨天突然想再加上图片的旋转功能,在网上看了很多相关的例子,可是没看到能同时实现我想要的功能的. 需求: (1)图片平移.缩放.旋转等一系列操作后,图片需要自动居中显示. (2)图片旋转后选自动水平显示或者垂直显示 (3)图片在放大缩小的同时都能旋转 Demo实现部分效果截图 Demo主要代码 Java MainActivity.java package com.practice.noyet.rotatezoomimagev

Android imageView图片按比例缩放

android:scaleType可控制图片的缩放方式,示例代码如下: <ImageView android:id="@+id/img" android:src="@drawable/logo" android:scaleType="centerInside" android:layout_width="60dip" android:layout_height="60dip" android:layo

js实现固定显示区域内自动缩放图片的方法_javascript技巧

本文实例讲述了js实现固定显示区域内自动缩放图片的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

在ASPX中图片怎样根据分辨率大小自动缩放?

问题描述 在ASPX中图片怎样根据分辨率大小自动缩放? 解决方案 解决方案二: 解决方案三:你可以用JS获取屏幕宽度,然后再调整大小.不过我还是建议你用百分比来设置估计要容易多了解决方案四:引用2楼licai1210的回复: 你可以用JS获取屏幕宽度,然后再调整大小.不过我还是建议你用百分比来设置估计要容易多了 这种方法是简单也可取的解决方案五:引用3楼wylp_19的回复: 引用2楼licai1210的回复:你可以用JS获取屏幕宽度,然后再调整大小.不过我还是建议你用百分比来设置估计要容易多了

android开发图片分辨率问题解决方案

android开发图片分辨率问题解决方案    一直受到android开发图片分辨率问题困扰.drawable-(xdpi,hdpi,mdpi,ldpi,nodpi)这几个文件夹到底怎么放图片呢?   dpi是什么呢? dpi是"dot per inch"的缩写,每英寸像素数. 四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high) 一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是

显示-为什么DrawImage根据分辨率自动缩放呀

问题描述 为什么DrawImage根据分辨率自动缩放呀 graphic.DrawImage(pOldBitmap,0,0,0,0,pOldBitmap->GetWidth(),pOldBitmap->GetHeight(),UnitPixel); 为什么显示的图片和原来的图片大了一倍呀

ASP技巧之让图片自动缩放以适合界面大小

技巧 如何让图片自动缩放以适合界面大小,拿出你的Editplus,打开c_function.asp文件,找到UBBCode函数,在第417行有如下语句 If Instr(strType,"[image]")>0  And ZC_UBB_IMAGE_ENABLE Then  '[img]    objRegExp.Pattern="(\[IMG=)([0-9]*),([0-9]*),(.*)(\])(.+?)(\[\/IMG\])"    strContent=

如何让图片自动缩放以适合界面大小

如何让图片自动缩放以适合界面大小,拿出你的Editplus,打开c_function.asp文件,找到UBBCode函数,在第417行有如下语句   If Instr(strType,"[image]")>0  And ZC_UBB_IMAGE_ENABLE Then  '[img]     objRegExp.Pattern="(\[IMG=)([0-9]*),([0-9]*),(.*)(\])(.+?)(\[\/IMG\])"    strContent=