2013-07-07 89 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了一槍。它對我來說工作得非常好。