本文很多代码内容来自郭霖老师的博客,个人用来学习和总结
郭霖老师原创文章网址:http://blog.csdn.net/guolin_blog/article/details/9316683
个人在为layout设置多张背景图时,出现了卡顿,运行效率低下。因此在郭霖老师文章的学习下,自己加以利用,备日后学习和其他朋友共享。直接上代码,注释已经很清晰,不懂大家可直接看郭霖老师的文章。本人草鸟一枚,如有过错,请多多帮助和指教。
package com.muquan.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
/**
* @author Administrator
*设置 满屏的背景图,被将背景图进行压缩
*/
public class MainActivity extends Activity {
// 屏幕高度
static int screenHeight;
// 屏幕宽度
static int screenWidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSecreenSize();
//满屏的缩略图
Bitmap bitmap=decodeSampleBitmapFromResource(getResources(),
R.drawable.bg_06,
screenWidth,
screenHeight);
// 设置背景图
getWindow().setBackgroundDrawable(new BitmapDrawable(getResources(), bitmap));
}
/**
* 获取设备屏幕高度和宽度
*/
public void getSecreenSize(){
WindowManager wManager=this.getWindowManager();
// 获取屏幕高度
screenHeight=wManager.getDefaultDisplay().getHeight();
// 获取屏幕宽度
screenWidth=wManager.getDefaultDisplay().getWidth();
}
/*
* return int 压缩图片的比率
* @Param reqWidth 压缩的宽度
* @Param reqHeight 压缩高度
*/
public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth,int reqHeight){
//获取得源图片的高和宽
final int height=options.outHeight;
final int width=options.outWidth;
//设置初始值,不压缩
int inSampleSize=1;
//根据实际比例,选择小值压缩
if(height>reqHeight||width>reqHeight){
final int heightRatio=Math.round((float)height/(float)reqHeight);
final int widthRatio=Math.round((float)width/(float)reqWidth);
inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio;
}
return inSampleSize;
}
/*
* 处理压缩图片
* @Param resId 资源图片的id
* @Param reqWidth 压缩的宽度
* @Param reqHeight 压缩高度
* */
public static Bitmap decodeSampleBitmapFromResource(Resources res,int resId,
int reqWidth,int reqHeight){
BitmapFactory.Options options=new BitmapFactory.Options();
//inJusetDecodeBounds设置true,将不会为图片分配内存,但BitmapFactory
//outWidth和outHeight,outMineType都会被赋值
options.inJustDecodeBounds=true;
//decodeResource从资源文件获取图片资源
//decodeFile从sd卡获取图片资源
//decodeStream从网上获取图片资源
BitmapFactory.decodeResource(res, resId,options);
//inSampleSize 为将原图片压缩几倍
options.inSampleSize=calculateInSampleSize(options, reqWidth, reqHeight);
//再次解析图片即可获得压缩后的图片
options.inJustDecodeBounds=false;
return BitmapFactory.decodeResource(res, resId, options);
}
}