2017-05-31 4 views
0

Ich verwende eine GridView, um 20 Bilder anzuzeigen. Ich hole und zeige die Bilder aus dem Internet mit Glide in einem Adapter, den ich erstelle. Das Problem ist, dass, auch wenn alle Bilder heruntergeladen werden, wenn ich die Rasteransicht scrolle, ich die Bilder mit einer verblassenden Animation sehe. Ich will das nicht. Ich möchte, dass alle Bilder in die Rasteransicht geladen werden, ohne dass sie angezeigt werden, wenn ich schneller scrolle.Android GridView Laden von Bildern mit Adapter und Glide

Ich habe versucht mit diskcache() und dontAnimate() aber es löste mein Problem nicht. Ich denke, das Problem ist, dass ich 4 Zellen der Gridview zeige. Wenn ich den Adapter scrolle, rufe das getView auf, um andere zwei Zellen zu zeigen und entferne die 2, die ich scrolle. Das Problem ist, dass die getview jedes Mal Zeit braucht, um andere zwei Zellen zu zeigen, und ich habe den Effekt, der wie ein Laden aussieht. Ich möchte, dass mein Szenario wie eine Rasteransicht aussieht, in der alle 20 Zellen vorhanden und zugewiesen sind.

Das ist mein Adapter:

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

Kann mir jemand helfen Lösung zu finden? Dank all

+0

Glide wird versuchen, Ihre Bilder herunterzuladen, wenn sie auf dem Bildschirm erscheinen. Es wird also eine Verzögerung geben, bis sie in deiner Zelle auftauchen. Wenn Sie keine Verzögerung wünschen, müssen Sie diese Bilder vorher herunterladen. Wenn Glide Cache-Optionen anbietet, erscheinen Ihre Bilder sofort zum zweiten Mal, aber Sie müssen immer darauf warten, dass sie das erste Mal herunterladen. –

+0

Ja, Glide lädt sie zum ersten Mal herunter. Aber mein Problem ist nicht zum ersten Mal. Das zweite Mal, und ich habe überprüft, dass alle Bilder heruntergeladen werden, und selbst wenn alle heruntergeladen werden, erscheinen sie auf der Bildlauf nicht sofort. – denno

Antwort

0

Versuchen Sie, diese

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

mehr knoow abour Glide here oder here klicken

0

Sie sollten einen Platten-Cache-Strategie hinzufügen Bilder aus dem Cache zu laden. können Sie SOURCE oder RESULT verwenden; SOURCE Speichert nur die ursprünglichen Daten im Cache und RESULT speichert das Medienelement nach allen Transformationen im Cache. zum Beispiel:..

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

Ich kann .diskCacheStrategy im Adapter nicht verwenden :( – denno

0

starten Glide.with (mContext) .load (pic.getBigImageUrl()) diskCacheStrategy (DiskCacheStrategy.SOURCE) .dontAnimate() in (holder.imageView);

+0

Ich kann .diskCacheStrategy und .dontAnimate() im Adapter nicht sehen :( – denno

+0

Hattest du diese Version von glide in gradle? – Vij

+0

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

Verwandte Themen