2014年10月31日金曜日

VolleyのImageLoaderを使ったListViewでの画像ちらつき制御

ListView内のImageViewでURLから画像を取得する際
Viewの再利用時にImageViewがちらつくことがあります。

ImageViewにURL文字列をタグ付けしてgetView()内でURL比較、URLが異なる場合だけ画像取得する、なんて手法が取られてました。

VolleyのImageLoaderを利用した際も同じようなことができますが更にスマートに実現できました。

ListViewとImageLoaderといえば、この記事にてImageContainerをImageViewにタグ付けしてView再利用時にImageLoaderのcancelを行うのが出ていますがこれを利用します。


ImageContainer mContainer = (ImageContainer)holder.imageView.getTag();
if(mContainer != null && mContainer.getBitmap() != null && mContainer.getRequestUrl().equals(url)){
holder.imageView.setImageBitmap(mContainer.getBitmap());
}else{
ImageListener imageListener = ImageLoader.getImageListener(holder.imageView, 0, 0);
ImageContainer mContainer = mImageLoader.get(url, imageListener);
holder.imageView.setTag(mContainer);
}

ImageContainerは前回取得した画像のBitmapとURLを持っています。
あとは単純にBitmapを持っていてURLが一緒だったらそのBitmapをImageViewに設定。
異なっていたらいつも通りの処理。ってだけです。
※ImageLoaderのget時に都度newされているためBitmapとURLの整合性は取れていると思っていいです。


0 件のコメント:

コメントを投稿