簡體   English   中英

Android ListView位圖優化

[英]Android ListView Bitmap Optimization

我有一個ListView顯示位圖圖片。 這些位圖會變得很大。 當我在ListView上滾動時,它似乎很沉重。 我可以使用哪些技術來優化ListView? 這可能涉及壓縮內存中的位圖,還是增強列表視圖內存管理的方法?

首先,請閱讀

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

它討論了視圖持有者模式,以及如何在線程中加載圖像。 另外,讀這篇

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

這里討論如何為位圖建立有效的內存緩存。

如果這還不夠,您可以采用的另一種方法是避免在滾動停止之前加載圖像。 如果用戶說跳到列表的底部,這可以防止listview加載所有圖像。 基本上是這樣的

    pagerList.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (scrollState != OnScrollListener.SCROLL_STATE_IDLE) {
                return;
            }
            // load images for adapter views between first and first+count.
            // depending on your memory requirements, you can pre-load additional
            // images before first and after first+count to give a better
            // user exp
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            first = firstVisibleItem;
            count = visibleItemCount;
        }
    });

這要求您為適配器中的每個項目保留一個ImageView的句柄,以便以后可以找到它並在其中設置適當的位圖。 這可以像在適配器中保留圖像視圖數組一樣簡單,其中索引==列表視圖中的位置。

我主要使用LruCache優化列表並從緩存LruCache加載圖像

在BaseAdapter類的getView中添加它

@Override
    public View getView(.....
   ..... . .  
     Bitmap image = getBitmapFromMemCache(name);
        if (image == null)
        {
         image = decodeSampledBitmapFromUri(image_path.get(position), 64,64);
        }
        else
        {
            Log.i("loding. ", "from cache "+name);
        }
        // Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(details), 64, 64);
         holder.img.setImageBitmap(image);
         addBitmapToMemoryCache(name, image);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM