好久没有写博客了,今天就先写一个小的关于在Android中加载大图如何避免内存溢出的问题。

后面会写如何使用缓存技术的核心类,android.support.v4.util.LruCache来加载图片。


直接上代码:

package com.example.oom_demo1;import android.os.Bundle;import android.app.Activity;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.Menu;import android.widget.ImageView;/** *  Android高效加载大图、多图解决方案,有效避免程序OOM *  方法1 * **/public class MainActivity extends Activity {private ImageView mImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mImageView = (ImageView) findViewById(R.id.imageView);//下面的代码非常简单地将任意一张图片压缩成100*100的缩略图,并在ImageView上展示。mImageView.setImageBitmap(decodeSampledBitmapFromResource(getResources(), R.drawable.a, 100, 100));}public static Bitmap decodeSampledBitmapFromResource(Resources res,int resId, int reqWidth, int reqHeight) {// 第一次解析将inJustDecodeBounds设置为true,来获取图片大小final BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeResource(res, resId, options);// 调用上面定义的方法计算inSampleSize值options.inSampleSize = calculateInSampleSize(options, reqWidth,reqHeight);// 使用获取到的inSampleSize值再次解析图片options.inJustDecodeBounds = false;return BitmapFactory.decodeResource(res, resId, options);}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 > reqWidth) {// 计算出实际宽高和目标宽高的比率final int heightRatio = Math.round((float) height/ (float) reqHeight);final int widthRatio = Math.round((float) width / (float) reqWidth);// 选择宽和高中最小的比率作为inSampleSize的值,这样可以保证最终图片的宽和高// 一定都会大于等于目标的宽和高。inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;}return inSampleSize;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


注:

你需要在你的工程目录下加入一张直接的较大的图片,然后进行

mImageView.setImageBitmap(decodeSampledBitmapFromResource(
getResources(), R.drawable.a, 100, 100));改成你自己的图片文件即可。

更多相关文章

  1. Android(安卓)matrix 控制图片的旋转、缩放、移动
  2. android拍照与读取相册
  3. Android(安卓)报错:Caused by: android.os.FileUriExposedExcepti
  4. Android(安卓)P SystemUI之StatusBar UI布局status_bar.xml解析
  5. Android--SoLoader,android动态加载so库
  6. Android异步加载图像小结 (含线程池,缓存方法)
  7. android解决坚屏拍照和保存图片旋转90度的问题,并兼容4.0
  8. Android(安卓)Paging组件Demo
  9. Android(安卓)TabHost使用、动态加载内容

随机推荐

  1. 如何利用Handler更新android的UI
  2. Android(安卓)调试原理
  3. 详解android:scaleType属性
  4. katalon设置Android(安卓)SDK路径
  5. Android(安卓)- 私有库项目创建及发布
  6. Android中ListView学习---你可能不知道的
  7. TextView中ellipsize属性
  8. Android知识体系总结(全方面覆盖Android知
  9. Android如何调用第三方SO库
  10. Android中webview跟JAVASCRIPT中的交互