2013-07-07 53 views
0

我发现了一个问题,使我的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的新手)

回答

2

图像缓存是一门完整的科学,如果你是一名菜鸟,并期望顺畅的无bug性能,那么这是不值得自己去做的。

实现谷歌排球库,而不是(孤单是一个很好的IO今年过交谈)

2

另一种选择是给AQuery了一枪。它对我来说工作得非常好。