@Override
protected void onPause() {
GridView gridView = (GridView) findViewById(R.id.public_photos);
int count = gridView.getCount();
for(int i = 0; i < count; i++){
ImageView v = (ImageView) gridView.getChildAt(i);
if (v != null){
if (v.getDrawable() != null) v.getDrawable().setCallback(null);
}
}
super.onPause();
}
Bitmap的OOM确实很让人头疼,所以在制造缩略图的时候直接把图片全部载入内存确实不合适,BitmapFactory.Options有个熟悉叫inJustDecodeBounds,可以把图片载入内存,但是可以获取一些边界信息,也就是图片大小信息。所以可以先预读取一次,算成缩放值,再按照该大小读取图片,具体的代码
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
// 获取这个图片的宽和高
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/fortest.jpg", options); //此时返回bm为空
options.inJustDecodeBounds = false;
//计算缩放比
int rate = (int)(options.outHeight / (float)100);
if (rate <= 0)
rate = 1;
options.inSampleSize = rate;
//重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦
bitmap=BitmapFactory.decodeFile("/sdcard/fortest.jpg",options);
int w = bitmap.getWidth();
int h = bitmap.getHeight();
ImageView im=new ImageView(this);
im.setImageBitmap(bitmap);
最后,图片存储的时候可以直接用bitmap.compress()方法
try {
FileOutputStream out=new FileOutputStream(file);
if(bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)){
out.flush();
out.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
分享到:
相关推荐
- **图片尺寸调整**:根据GridView的item大小动态调整图片的尺寸,避免加载过大的图片导致内存消耗过高。 - **滚动监听**:监听GridView的滚动事件,只在即将可见的item范围内加载图片,实现“滚动即加载”。 - **...
当应用程序占用的内存超过系统分配的最大值时,就会触发内存溢出。在Android中,尤其是加载大图或大量图片时,如果直接在主线程中进行,会导致UI卡顿,甚至引发应用崩溃。 解决这个问题的关键是异步加载。异步加载...
android加载大量图片内存溢出的三种解决办法
除了上面提到的,还可能涉及到内存和磁盘缓存策略,如LruCache或Picasso库,以优化图片加载,防止内存溢出。此外,针对大量图片的显示,我们还需要考虑性能优化,比如使用BitmapOptions预先计算Bitmap的大小,或者...
在实现图片墙时,我们通常会将每个单元格设为一张图片,通过设置GridView的列数和间距,创建出美观的图片展示效果。要实现GridView的高度自适应,我们需要在Adapter中动态计算每个单元格的高度,这通常涉及到图片的...
然而,当GridView需要加载大量图片时,如果不妥善处理,很容易导致内存溢出(Out-Of-Memory,简称OOM)问题。本篇文章将深入探讨如何在Android GridView中加载大量图片,同时避免出现OOM错误。 首先,理解OOM的原因...
这个问题通常是由于图片加载不当导致内存消耗过大而引起的。以下将详细讨论如何在Android中完美解决GridView异步加载图片和处理大量图片时的内存优化策略。 1. **使用BitmapOptions预估大小** 在加载图片之前,...
然而,当处理大量图片时,特别是在用户滚动时实时加载,可能会遇到内存溢出(Out Of Memory,简称OOM)的问题。这是因为Android系统为每个应用程序分配的内存有限,而加载大图或大量图会消耗大量内存。因此,我们...
用GridView加动画写了一个滑动放大显示选中图片 项目需求在制定大小区域写一个横向菜单栏,菜单栏整体不能移动,GalleryFlow画廊不能满足需求,就自己重写写了一个)划到当图片时换个图片且动画效果渐渐放大,划到下...
- 缩放图片大小以适应屏幕,防止大图加载慢或者内存消耗过大。 - 使用异步加载图片,避免阻塞UI线程。 9. **响应式设计** - 考虑不同屏幕尺寸和分辨率,使用比例适配或dp单位确保图片在不同设备上的显示效果。 ...
为了避免内存溢出,需要根据ImageView的实际大小动态调整图片尺寸。在下载图片前,先获取ImageView的宽高,然后根据比例下载相应尺寸的图片。 6. **加载状态显示** 可以添加占位符(如loading图片)表示图片正在...
excel文件图片和gridview图片
GridView图片墙,ListView嵌入GridView
当涉及到图片显示时,如果直接在GridView中加载大图,可能会导致应用卡顿,用户体验下降。因此,"GridView图片异步显示"是一个重要的优化策略,它通过异步加载技术来避免主线程阻塞,提高应用性能。 GridView的图片...
- 图片的尺寸应该与GridView单元格匹配,避免加载过大图片,浪费资源。 - 当图片从网络加载时,可以显示一个占位符或进度指示器,提高用户体验。 - 考虑使用更高级的图片加载库,如Glide或Picasso,它们内置了缓存和...
4. 考虑性能优化,避免因大量图片加载导致内存溢出。可以通过使用ViewHolder模式减少视图查找的开销,以及合理配置图片的大小和质量。 接下来,我们关注"Delete GridView"这一部分,这通常指的是在每个单元格中添加...
7. **优化性能**:由于图片可能会占用大量内存,因此在加载图片时,我们需要注意进行尺寸调整,避免加载过大图像导致性能问题。同时,可以考虑异步加载图片,避免阻塞主线程。 8. **事件监听**:如果需要对GridView...
对于大量图片,推荐使用内存缓存(如LruCache)和磁盘缓存(如DiskLruCache)策略,以防止内存溢出并提高加载速度。 5. 动态添加边框和播放按钮: 这可能需要在`getView()`中根据点击状态动态设置ImageView的背景...
4. **图片加载优化**:由于图片可能较大,直接加载可能会消耗大量内存,导致应用崩溃。因此,通常会使用一些图片加载库,如Glide、Picasso或Universal Image Loader,它们可以自动处理内存和磁盘缓存,以及图片的...
GridView继承自AbsListView,它会根据指定的列数自动调整子视图的大小,以填满整个屏幕。默认情况下,GridView的每个Item都是等大小的。要在GridView中实现Item的放大缩小,我们需要自定义一个GridView的Adapter,...