图片压缩设置为界面背景,避免OOM

本文很多代码内容来自郭霖老师的博客,个人用来学习和总结
郭霖老师原创文章网址: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;
        }

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

}




你可能感兴趣的:(图片压缩设置为界面背景,避免OOM)