2015-06-30 5 views
6

Questa è l'immagine originale:Android ImageView mostra l'immagine verdastra

enter image description here

Questa è l'immagine di rendering utilizzando ImageView:

enter image description here

Tuttavia, a volte, quando l'immagine è in un carosello , scorrere verso l'immagine può causare il rendering corretto dell'immagine, il che è ancora più strano ...

Questo comportamento si verifica sia su un LG G3 (Android 5.1) che su Genymotion (Android 4.4.4). Sto utilizzando la libreria Glide per il caricamento delle immagini, utilizzando il formato ARGB_8888 decodifica:

new GlideBuilder(this).setDecodeFormat(DecodeFormat.PREFER_ARGB_8888); 
+0

Seguiamo sul tema GitHub: https://github.com/bumptech/glide/issues/515 –

risposta

7

questo è un problema risolto 305. Ecco un breve riepilogo:

Questo problema viene visualizzato solo con immagini con formato JPEG (la qualità è irrilevante). Sembra che ciò influisca su RGB_565 molto più significativamente di ARGB_8888, quindi potresti decidere di passare da DecodeFormat a ARGB_8888 (cancella i dati dell'app per verificare se il problema è stato risolto). Ma può apparire anche con ARGB_8888, in modo da utilizzare uno dei seguenti soluzioni:

  1. Uso DiskCacheStrategy.NONE (per immagini locali) o DiskCacheStrategy.SOURCE (per immagini remote) per impedire Glide da re-compressione delle immagini:

    Glide.with(this) 
        .load(url) 
        .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
        .into(imageView); 
    
  2. Usa asBitmap() e un BitmapEncoder personalizzato per comprimere le immagini sempre colpiti come PNG:

    Glide.with(this) 
        .fromResource() 
        .asBitmap() 
        .encoder(new BitmapEncoder(Bitmap.CompressFormat.PNG,100)) 
        .load(R.drawable.testimg) 
        .into(imageView); 
    
+0

Grazie, diskCacheStrategy (DiskCacheStrategy.SOURCE) è la chiave qui. Tutte le variazioni di DecodeFormat.PREFER_ARGB_8888/GlideBuilder/GlideModule sono inutili per forzare effettivamente il colore a 24 bit. – Ryan

+0

Non funziona per me. Le immagini sono ancora verdi – RexSplode

1

Nel caso in cui qualcuno abbia provato tutto ciò che è elencato sopra e nessuno di questi ha funzionato (come nel mio caso), c'è un'altra soluzione alternativa. Poiché il colore verdastro si verifica durante la trasformazione, possiamo evitare la trasformazione.

Glide.with(context) 
    .load(url) 
    .dontTransform() 
    .into(holder.productImage); 
1
This issue may happen on few devices not all like one plus 3 or 3T and some LG devices when fetching imageUrl from server to your android project. 

public static void loadImageWith(Context context, String imageUrl, ImageView imageView) { 
    Glide.with(context) 
      .load(imageUrl) 
      .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
      .dontTransform() 
      .placeholder(R.drawable.empty_photo) 
      .into(imageView); 
    } 

centerCrop() may create issue, so avoid to use centerCrop(). 
+0

buona scoperta !! –