Android ListView平滑滚动加载磁盘上的图像

时间:2013-07-07 21:41:26

标签: 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的新手)

2 个答案:

答案 0 :(得分:2)

图像缓存是一门完整的科学,如果你是一个新手,并且期望顺利的无差错表现,那就不值得做。

实施Google Volley库(今年也是一个不错的IO演讲)

答案 1 :(得分:2)

另一个选择是给AQuery一个机会。它对我来说非常好。