2017-04-19 61 views
0

我使用SubsamplingScaleImageView与滑翔加载,缓存和显示图片:滑翔:无法复制回收的位图

SubsamplingScaleImageView mImageView; 

Glide.with(this) 
.load(url) 
.asBitmap() 
.into(new SimpleTarget<Bitmap>() { 
     @Override 
     public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
       mImageView.setImage(ImageSource.bitmap(
        Bitmap.createBitmap(resource, x1, y1, x2 - x1, y2 - y1))); 
     } 
    }); 

它的工作原理,但有时死机,错误IllegalStateException: Can't copy a recycled bitmapBitmap.createBitmap。如何解决它?

回答

0

出于某种原因,你的Bitmap得到回收。要修复它,您可以执行检查,然后继续进行必要的操作:

@Override 
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
    if (!resource.isRecycled()) { 
     mImageView.setImage(ImageSource.bitmap(Bitmap.createBitmap(resource, x1, y1, x2 - x1, y2 - y1))); 
    } 
} 
+0

但是,此检查图像将不会显示。有另一种方式来实现呢? – BArtWell

+1

你必须找出原因是什么/什么条件下,/什么样的结果你'Bitmap'得到回收。在这个阶段(在这个回调),我想不出比试图重新加载图像的任何其他。 – azizbekian