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の整合性は取れていると思っていいです。


2014年10月30日木曜日

GenymotionのFailed to import OVAエラー

久しぶりにGenymotionを使おうとしたら起動しなくなってしまっていました。
原因は不明ですがGenymotionの更新かOS更新が原因だったのでは、と思ってます。

苦肉の策でGenymotion及びVirtualBoxをAppCleanerで削除して
再インストールしたところ今度は端末登録できなくなってしまいました。
エラー内容は

Failed to import OVA

これとかこれとか見たのですが解決せず。。。

ダメ元でGenymotion Shellを実行したらアプリの認証(ダイアログのやつ)を
してなくて、これが原因で端末追加できていませんでした。

Genymotionを更新したらGenymotion Shell起動は必須のよう。