您的位置:首页 > 移动开发 > Android开发

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

2016-05-24 22:30 405 查看
本文很多代码内容来自郭霖老师的博客,个人用来学习和总结
郭霖老师原创文章网址: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;@Overrideprotected 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);}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 压缩 位图 OOM