2017-04-19 4 views
0

J'utilise SubsamplingScaleImageView avec Glide pour charger, cache et montrent des images:Glide: Ne peut pas copier un bitmap recyclé

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))); 
     } 
    }); 

Il fonctionne mais se bloque parfois avec l'erreur IllegalStateException: Can't copy a recycled bitmap dans Bitmap.createBitmap. Comment le réparer?

Répondre

0

Pour une raison quelconque, votre Bitmap est recyclé. Pour le réparer, vous pouvez effectuer une vérification et ensuite procéder à l'action nécessaire:

@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

Mais avec cette vérification, l'image ne sera pas affichée. Y a-t-il un autre moyen de l'atteindre? – BArtWell

+1

Vous devez savoir pour quelle raison/dans quelles conditions/quels résultats votre 'Bitmap' pour être recyclé. À ce stade (dans ce rappel) je ne peux pas penser à autre chose que d'essayer de charger à nouveau l'image. – azizbekian