我有一个可以显示位图图片的ListView。这些位图变得相当大。当我在ListView上滚动时,它看起来很重。我可以使用哪些技术来优化ListView?这可能包括在内存中压缩位图,或者增强列表视图内存管理的方法?
发布于 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加载所有的图像。基本上,像这样的东西,
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句柄,以便以后可以找到它并在其中设置适当的位图。这可以像在适配器中保留一个图像视图数组一样简单,其中索引==列表视图中的位置。
发布于 2014-10-02 14:56:18
我主要使用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);https://stackoverflow.com/questions/12306533
复制相似问题