2017-05-31 10 views
0

私はGridViewを使用して20枚の画像を表示しています。私は作成したアダプタでGlideを使ってウェブから画像を取り出して表示しています。問題は、すべての画像がダウンロードされた場合でも、グリッド表示をスクロールしているときに、フェードのようなアニメーションで表示されている画像が表示されていることです。私はこれを望んでいない。私はより速くスクロールすると、それらが表示されることなく、グリッドビューに読み込まれたすべての画像を持っていたい。AndroidのgridViewは、アダプタとGlideを使用して画像を読み込みます。

私はdiskcache()とdontAnimate()を使ってみましたが、私の問題は解決しませんでした。問題は私がgridviewの4つのセルを表示していることだと思います。私がスクロールすると、アダプタはgetViewを呼び出して他の2つのセルを表示し、スクロールしている2つを削除します。問題は、getviewが毎回他の2つのセルを表示するのに時間がかかり、ロードのような効果があることです。自分のシナリオを20個のセルがすべて存在し割り当てられているグリッドビューのように見せたい。

これは私のアダプタです:

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

誰かが私は解決策を見つける手助けすることはできますか?グライドあなたはキャッシュからイメージをロードするために、ディスクキャッシュ戦略を追加する必要がありますhereまたはhere

+0

Glideは、画像が画面に表示されようとしているときに画像をダウンロードしようとします。だから、彼らがあなたの細胞に現れるまでには遅れがあるでしょう。遅れたくない場合は、あらかじめそれらの画像をダウンロードする必要があります。グライドがキャッシュオプションを提供する場合、画像は2度目に即座に表示されますが、最初にダウンロードするのを待つ必要があります。 –

+0

はい、グライドが初めてダウンロードしています。しかし、私の問題は初めてではありません。 2回目と私は、画像がすべてダウンロードされていることを確認しました。すべてダウンロードされていても、スクロールでは即時ではありません。 – denno

答えて

0

この

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

もっとknoowしてください。 SOURCEまたはRESULTを使用できます。 SOURCE元のデータをキャッシュに保存し、RESULTすべての変換をキャッシュに保存した後にメディアアイテムを保存します。例えば :

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

をクリックabourおかげで、すべての

+0

アダプタで.diskCacheStrategyを使用できません:( – denno

0

この Glide.with(mContext).LOADを試し(pic.getBigImageUrl())diskCacheStrategy(DiskCacheStrategy.SOURCE).dontAnimate()(holder.imageView)へ。

+0

アダプターで.diskCacheStrategyと.dontAnimate()を参照できません:( – denno

+0

このバージョンのグライドをグラデルで使用しましたか? – Vij

+0

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

関連する問題