2017-05-31 2 views
0

J'utilise un GridView pour afficher 20 images. Je récupère et montre les images du Web en utilisant Glide dans un adaptateur que je crée. Le problème est que, même si toutes les images sont téléchargées, quand je défile la grille, je vois les images apparaître avec une animation de fondu. Je ne veux pas ça. Je veux que toutes les images soient chargées dans la grille sans les voir apparaître si je défile plus vite.Android gridView chargement des images à l'aide de l'adaptateur et Glide

J'ai essayé d'utiliser cache disque() et dontAnimate() mais il n'a pas résolu mon problème. Je pense que le problème est que je montre 4 cellules du gridview. Lorsque je défile, l'adaptateur appelle getView pour afficher deux autres cellules et supprimer les 2 que je défile. Le problème est que le getview chaque fois prend du temps pour montrer deux autres cellules et j'ai l'effet qui ressemble à un chargement. Je veux que mon scénario ressemble à une vue de grille avec toutes les 20 cellules existantes et allouées.

Ceci est mon adaptateur:

public class ImagesAdapter extends BaseAdapter { 
private Context mContext; 
private ArrayList<Picture> images; 

public ImagesAdapter(Context context, int resource, ArrayList<Picture> inputImages) { 
    super(); 
    this.mContext = context; 
    this.images = inputImages; 
} 

@Override 
public int getCount() { 
    return images.size(); 
} 

@Override 
public Picture getItem(int position) { 
    return images.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 

    View row = convertView; 
    ViewHolder holder = null; 

    if (row == null) { 
     row = LayoutInflater.from(mContext).inflate(R.layout.grid_item_layout, null); 
     holder = new ViewHolder(); 
     holder.imageView = (ImageView) row.findViewById(R.id.grid_item_image); 
     holder.id = images.get(position).getImageId(); 
     row.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) row.getTag(); 
     holder.id = images.get(position).getImageId(); 
    } 

    Picture pic = images.get(position); 
    Glide 
      .with(mContext) 
      .load(pic.getBigImageUrl()) 
      .into(holder.imageView); 

    return row; 
} 
public class ViewHolder { 
    ImageView imageView; 
    public String id; 
} 
} 

Quelqu'un peut-il me aider à trouver la solution? Merci à tous

+0

Glide tente de télécharger vos images lorsqu'elles sont sur le point d'apparaître à l'écran. Il y aura donc un délai jusqu'à ce qu'ils apparaissent dans votre cellule. Si vous ne voulez pas de retard, vous devez télécharger ces images à l'avance. Si Glide propose des options de cache, vos images apparaîtront immédiatement pour la deuxième fois, mais vous devrez toujours attendre qu'elles soient téléchargées la première fois. –

+0

Oui, Glide les télécharge pour la première fois. Mais mon problème n'est pas pour la première fois. La deuxième fois et j'ai vérifié que les images sont toutes téléchargées, et même si elles sont toutes téléchargées, sur le parchemin, elles n'apparaissent pas immédiatement. – denno

Répondre

0

Essayez cette

Glide 
.with(mContext) 
.load(pic.getBigImageUrl()) 
.placeholder(R.drawable.defaultImage) 
.into(holder.imageView); 

à knoow plus ravail Glide cliquez here ou here

0

Vous devez ajouter une stratégie de cache disque pour charger des images à partir du cache. vous pouvez utiliser SOURCE ou RESULT; SOURCE Enregistre uniquement les données d'origine à mettre en mémoire cache et RÉSULTAT Enregistre l'élément multimédia après toutes les transformations à mettre en cache. par exemple:..

Glide 
.with(mContext) 
.load(pic.getBigImageUrl()) 
.diskCacheStrategy(DiskCacheStrategy.SOURCE) 
.into(holder.imageView); 
+0

Je ne peux pas utiliser .diskCacheStrategy dans l'adaptateur :( – denno

0

Essayez cette Glide.with (mContext) .load (pic.getBigImageUrl()) diskCacheStrategy (DiskCacheStrategy.SOURCE) .dontAnimate() dans (holder.imageView);

+0

Je ne peux pas voir .diskCacheStrategy et .dontAnimate() dans l'adaptateur :( – denno

+0

avez-vous eu cette version de glide dans Gradle? – Vij

+0

compile 'com.github.bumptech.glide: glide : 3.7.0 ' – Vij