我创建了一个允许您选择多张照片的照片库,但我注意到使用缩略图填充 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 个左右的缩略图后开始放慢速度。有人知道加快缩略图检索的技巧吗?