« 任意の画像を読み込めるようにする(ロード時の画像縮小) | メイン | 1.6 で ListView が透過されない状況への対処 »

2011年02月08日

Android:: サムネイルを読み込みつつ表示する

    

サムネイルの生成はある程度時間がかかるので画像が多い場合、一気に表示しようとすると表示前に待たされる。
そこで、GridView でまず全てのサムネイルのリストを表示して、バックグラウンドで画像を読みつつ、サムネイルを更新していく方法。

バックグラウンドで画像を読み込むのは AsyncTask を使うと楽。
android では UI スレッド以外で UI の更新は出来ない。
そのため UI スレッド側のメッセージキューにメッセージ投げて更新してもらうというような処理をする必要があるが、AsyncTask を使うとこの更新処理を呼び出す部分をある程度勝手にやってくれる。
UI 更新のためのメソッドをコール、もしくはコールされるタイミングがあるので、そのメソッド内に処理を書いておけば UI 更新出来る。
( ゲームの場合はロックして描画して、アンロックするという普通の排他処理で書ける )

具体的な方法は 1枚読むごとに AsyncTask::publishProgress をコールして、AsyncTask::onProgressUpdate で BaseAdapter::notifyDataSetChanged をコールしてやると再度 BaseAdapter::getView がコールされるので、新たに読み込まれたサムネイルを表示できる。
ただ、これだと 1個読むごとに GridView の中の全部のビューを再生成していることになるのでその辺りどうにかならないものかと思う。
新たに読まれたサムネイルだけ更新する方法が何かありそうな気がするがわからない。



投稿者 Takenori : 2011年02月08日 09:10




comments powered by Disqus
Total : Today : Yesterday : なかのひと