複数の写真を選択できるフォト ギャラリーを作成しましたが、GridView にサムネイルを表示するのが非常に遅くなる場合があることに気付きました。私はタイマーを使用します:
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
fetchNextThumb();
}
}, 0, 25);
GridView でサムネイルのない子を検索し (無効にしておく)、MediaStore から適切なサムを取得します (まだキャッシュされていない場合)。UI スレッドで setImageBitmap() を実行します。
private void fetchNextThumb()
{
for (int i = 0; i < gridView.getChildCount(); i++)
{
ImageSelectView isv = (ImageSelectView)gridView.getChildAt(i);
if (isv == null)
continue;
if (isv.isEnabled())
continue;
activeThumb = thumbCache.get(isv.getId());
if (activeThumb == null)
{
activeThumb = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), isv.getId(), MediaStore.Images.Thumbnails.MICRO_KIND, null);
thumbCache.put(isv.getId(), activeThumb);
}
activeView = isv;
runOnUiThread(setNextThumb);
return;
}
}
private Bitmap activeThumb;
private ImageSelectView activeView;
private Runnable setNextThumb = new Runnable() {
public void run() {
activeView.setImageBitmap(activeThumb);
activeView.invalidate();
activeView.setEnabled(true);
}
};
最初は信じられないほど高速ですが、約 50 個のサムネイルが取得されると遅くなり始めます。サムネイルの取得を高速化するための秘訣を知っている人はいますか?