首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓ListView位图优化

安卓ListView位图优化
EN

Stack Overflow用户
提问于 2012-09-07 02:49:21
回答 2查看 5.1K关注 0票数 2

我有一个可以显示位图图片的ListView。这些位图变得相当大。当我在ListView上滚动时,它看起来很重。我可以使用哪些技术来优化ListView?这可能包括在内存中压缩位图,或者增强列表视图内存管理的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-07 02:53:29

首先,看看这个,

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

它讨论了视图持有者模式,以及在线程中加载图像。还有,看看这个,

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

这篇文章讨论了如何为位图构建高效的内存缓存。

如果这还不够,您可以使用的另一种技术是避免加载图像,直到滚动停止。如果用户说flings到列表的底部,这可以防止listview加载所有的图像。基本上,像这样的东西,

代码语言:javascript
复制
    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句柄,以便以后可以找到它并在其中设置适当的位图。这可以像在适配器中保留一个图像视图数组一样简单,其中索引==列表视图中的位置。

票数 4
EN

Stack Overflow用户

发布于 2014-10-02 14:56:18

我主要使用LruCache来优化列表,并从缓存LruCache加载图像

将此代码添加到BaseAdapter类的getView中

代码语言:javascript
复制
@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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12306533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档