Android高效加载大图、多图解决方案,有效避免程序内存溢出现象
好久没有写博客了,今天就先写一个小的关于在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));改成你自己的图片文件即可。
Android高效加载大图、多图解决方案,有效避免程序内存溢出现象相关推荐
- Android高效加载大图、多图解决方案,有效避免程序OOM
高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...
- Android高效加载大图、多图解决方案_LruCache,有效避免程序OOM
本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/training/displaying ...
- Android 高效加载大图片
来源:http://www.open-open.com/lib/view/open1389755918242.html 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状 ...
- javascript图片加载---加载大图的一个解决方案
网页在加载一张大图片时,往往要加载很久: 而且,在加载过程中,无法很好地控制图片的样式,容易造成错位等显示错误: 如果能够在加载大图时,先使用一张较小的loading图片占位,然后后台加载大图片,当大 ...
- android开发 加载大图,Android加载超长图(微博长图)
对于一些需要加载超长图需求的同学,可能一开始使用使用bitmap或者inputstream转bitmap(或类似加载库)会发现出现图片太大加载不出来的问题(其实我也是遇到了这个问题ヽ(≧Д≦)ノ).解 ...
- Glide加载大图长图
这里用的Glide是4.11.0的 第一种方法: Glide.with(activity).load(yourUrl).asBitmap().into(new SimpleTarget<Bitm ...
- android高效加载网络图片
2019独角兽企业重金招聘Python工程师标准>>> 需求:做项目的时候有一个需求:利用从网上加载图片到手机并且要调整成为自适应手机屏幕大小. 我用的是Picasso包来加载图片, ...
- android 小米加载大图,Android手机拍照或从本地相册选取图片设置头像。适配小米、华为、7.0...
1,让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像. 2,让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像. 代码如下 MainActivity.Java文件: package ...
- Android图片加载框架最全解析(三),深入探究Glide的缓存机制
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/54895665 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...
最新文章
- U盘安装Ubuntu14.4时遇到分区问题记录
- PostgreSQL流复制之二:pgpool-II实现PostgreSQL数据库集群(转发+整理)
- opera在我的博客发不了帖子,郁闷
- 【数据库系统】形式化查询语言の关系代数
- SpringBoot2 整合 Drools规则引擎,实现高效的业务规则
- 我的k8s随笔:Kubernetes部署的一些输出信息
- python同时赋值_python同时给多个变量赋值
- 群联MPALL v3.23.00量产工具(可刷PS2251-50固件)
- 【四足机器人--支撑相足端反作用力预测】(5)ConvexMPCLocomotion代码解析
- 速学 | 如何帮女朋友用Java合并两个PDF
- 已知两边求角度公式_有30度角的直角三角形,已知一直角边,求另两边的公式,快速求法...
- python中的pth文件
- 小程序云开发(九):WeUI
- 小红书用户画像分析_2020小红书爆品打造策略及案例分析!
- STM32 使用SWD方式下载不了程序
- MATLAB 如何让图形变美?[第一期]
- 实例掌握Hadoop MapReduce
- typec扩展坞hdmi没反应_手机\笔记本使用Type-c扩展坞的问题解析
- 愚人节 之强迫症描述
- wireshark+网管交换机抓包教程