我创建了一个图片库,允许您选择多张照片,但是我注意到用缩略图填充GridView可能非常慢。我使用定时器:
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
fetchNextThumb();
}
}, 0, 25);
它搜索GridView的孩子没有缩略图(我保持禁用),检索适当的拇指从MediaStore,如果它还没有缓存,并执行setImageBitmap()在UI线程:
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个缩略图后开始变慢。有人知道加快缩略图检索速度的技巧吗?
好了,我知道为什么有些缩略图加载速度比其他的快了。我使用
managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{ MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }, null, null, MediaStore.Images.Media._ID);
显然从SD卡和设备中抓取图像。不出所料,SD卡图片的拇指加载速度比设备慢得多。不过,内置的图库似乎没有这个问题。我现在的解决方案是在加载一次SD卡图像后保存设备上的缩略图。
对于任何对实现自定义图片库感兴趣的人来说,上面的代码应该工作得很好。有任何问题请随时发信息给我。