我发现了一个问题,使我的listview滚动生涩。我在滚动时从磁盘加载图像。下面是示例代码:Android ListView平滑滚动加载磁盘上的图像
如果private class MyAdapter extends ArrayAdapter<MyListItemExt> {
//...
public View getView(int position, View convertView, ViewGroup parent) {
//...
Bitmap bit = SharedCode.sharedGetImageFromDiskOrInternet(thisAppContext, "contacts" + File.separator + data.image_file_name);
if (bit != null) {
ViewTreeObserver vto = icon.getViewTreeObserver();
vto.addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
icon.getViewTreeObserver().removeGlobalOnLayoutListener(this);
icon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
SharedCode.sharedUtilScaleImage(icon,false);
}
}
);
icon.setImageBitmap(bit);
icon.setBackgroundColor(data.backgroundColorInt);
icon.setPadding(1, 1, 1, 1);
icon.setVisibility(View.VISIBLE);
}
不知道这将是明智的使用异步这里...(如果是这样,这样做的最佳方式),如果用户在主UI线程上滚动,这将是坏和图标参考文献已失效。
这留下了启动时预取所有图像的另一种选择,但我不喜欢在内存中保存图像。
如果用户在列表视图中仍然可以看到iem,是否可以使用异步构造来加载背景中的图像,并使它们在加载时可见?任何“最佳做法”在这? (我仍然是Android的新手)