Android中对加载大图的处理
来源:互联网 发布:远程迅雷 linux 编辑:程序博客网 时间:2024/05/22 08:28
1.先看加载原理:Android中图片是以像素的形式加载到内存中。png、bmp、jpg等格式的图片(位图文件),都是以像素表述图片大小的。虚拟机的内存并不是无限的大,而是当前应用程序所能分配的内存。当图片的大小超过虚拟机内存的大小,就会出现OutOfMemoryError
2.如何解决?
a.思路: 把图片一相应的比例缩小,而不影响视觉效果。
代码如下:
public class ImageActivity extends Activity { private EditText imageShow_et; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image); imageView = (ImageView) findViewById(R.id.image_iv); } public void showImage(View view) { // 1.图片解析的配置: BitmapFactory.Options options = new Options(); options.inJustDecodeBounds = true;// 加载图片的时候,只获取该图片的属性,而不返回bitmap // 2.获取图片的宽高信息 BitmapFactory.decodeFile( Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/big.JPG", options); int pictureWidth = options.outWidth; int pictureHeight = options.outHeight; // 3.获取手机屏幕的宽高 WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display phoneDisplay = wm.getDefaultDisplay(); Point outSize = new Point(); phoneDisplay.getSize(outSize); int screenWidth = outSize.x; int screenHeight = outSize.y; // 4.设置缩放比例: int dx = pictureWidth / screenWidth; int dy = pictureHeight / screenHeight; int scale = 1; if (dx > dy && dx > 1) { scale = dx; } if (dy > dx && dy > 1) { scale = dy; } // 5.设置图片的采样比例,对图片以缩放比例来显示图片 options.inSampleSize = scale; options.inJustDecodeBounds = false;// 真的解析图拍了,并返回Bitmap Bitmap bitmap = BitmapFactory.decodeFile( Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/big.JPG", options); imageView.setImageBitmap(bitmap); }}
b.用Google本身提供的一套解决方案BitmapFun,它可以解决加载图片慢,OOM的问题.其中的ImageFetcher就是根据图片三级缓存原理来处理图片:先在内存中找,内存中找不到再在文件中找,最后是网络查找。清理图片缓存的时候可以用DiskLruCache.clearCache,一键清除。
c. 还可以使用xUtils中专门针对图片的BitmapUtils。
0 0
- Android中对加载大图的处理
- Android中对大图的处理的实现和分析
- android 加载大图片处理
- Android中大图片加载及快速浏览处理
- Android中 加载大图片
- Android中大图片加载
- iPhone中一种对超级大图的显示处理方法
- Android之Bitmap大图加载处理
- android加载大图片时oom问题处理
- Android中高效的显示图片 - 加载大图
- Android中高效的显示图片 - 加载大图
- Android中如何加载大图片
- Android中使用WebView加载大图
- android中加载大图片到内存
- Android中处理大图片时图片压缩
- Android中处理大图片时图片压缩
- Android中处理大图片时图片压缩
- android加载大图片的方法
- verilog 有符号数(2转)
- 如何开发一个Server-Client模型的程序
- tail 命令
- HDU 5531 Rebuild ——— 2015ACM-ICPC亚洲区长春站
- Nginx服务器的概念
- Android中对加载大图的处理
- log4j:ERROR Failed to load driver问题
- 二叉树精选
- 排序算法之二路归并排序
- apache httpd学习笔记二 - 命令
- git diff 和 git reset
- Java enum的用法详解
- android的TextView的TextWatcher使用
- 内存管理笔记(分页,分段,逻辑地址,物理地址与地址转换方式)