当我加载很多位图时,Android列表视图滚动不顺畅

时间:2014-10-31 02:28:44

标签: android listview android-listview bitmap

最近我遇到一个奇怪的问题,当我使用名为Universal-Image-Loader的github库时。我的listview项目中每个最多有三个imageview。当我滚动listview来显示图像时,listview是如此不流畅.I阅读源代码,我发现它从后台线程加载位图然后使用处理程序将位图发布到ui线程。所以我想知道是因为我加载了很多位图并将大量的消息发布到ui线程,然后它导致listview不流利。

List<String> babySnapImgUrls = shopBean.babySnapImgUrls;
if (babySnapImgUrls != null) {
    int size = Math.min(babySnapImgUrls.size(), 3);
    for (int i = 0; i < size; i++) {
        final ImageView snapView = mViewHolder.snapViews[i];
        if(snapView.getVisibility() != View.VISIBLE)
            snapView.setVisibility(View.VISIBLE);
        //snapView.setImageDrawable(null); //                Object url = mViewHolder.snapImageViewAwares[i].getWrappedView().getTag(); //       String urlStr = ""; //                if(url != null){ //              urlStr = url.toString(); //                }
        //if(!babySnapImgUrls.get(i).equals(urlStr)) {
            mViewHolder.snapImageViewAwares[i].getWrappedView().setTag(babySnapImgUrls.get(i));
           // Log.e("koudai",ImageLoader.getInstance().)
            displayImage(babySnapImgUrls.get(i), mViewHolder.snapImageViewAwares[i],
                    KoudaiDisplayImageOptions.DEFAULT_DISPLAY_IMAGE_OPTIONS);
        //}
    }
    for (int i = size; i < 3; i++) {
        if(mViewHolder.snapViews[i].getVisibility() != View.INVISIBLE)
            mViewHolder.snapViews[i].setVisibility(View.INVISIBLE);
        ImageLoader.getInstance().cancelDisplayTask(mViewHolder.snapImageViewAwares[i]);
    }
}

1 个答案:

答案 0 :(得分:0)

在ListView中加载位图需要正确的方法。我遇到了同样的问题,我发现这documentation有点帮助。

如果没有最佳实践,那么处理滚动滞后的最后手段是减小位图的大小(或质量)。我使用Picasso来加载和调整图像大小。在那之后,我终于顺利滚动了。