【问题标题】:What is the correct way in android to load images from URL in a ListView without delayandroid中从ListView中的URL加载图像的正确方法是什么?
【发布时间】:2018-04-17 17:13:01
【问题描述】:

我必须显示一个帖子列表,其中一些带有图像(想想类似 twitter),当我在 ListView 上滚动时加载更多,但图像需要几秒钟才能出现。我怎样才能毫不拖延地进行加载?目前我正在使用 Picasso

这是我的代码:

 ListView lv = findViewById(R.id.list_feed);
    arrayPosts = fillArray(data);
    adapter= new PostAdapter(this, arrayPosts);
    lv.setOnScrollListener(new AbsListView.OnScrollListener() {

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
                             int totalItemCount) {

            int lastIndexInScreen = visibleItemCount + firstVisibleItem;

            if (lastIndexInScreen >= totalItemCount && totalItemCount > 0 && !isLoading) {
                isLoading = true;

                loadMore();
            }
        }
    });

    lv.setAdapter(adapter);

我的 Adapter 的 getView() 方法:

public View getView(int i, View view, ViewGroup viewGroup) {

    Post post = (Post) getItem(i);
    view = LayoutInflater.from(context).inflate(R.layout.row_post_item, null);
    (...)

    Picasso.with(context).load(post.getImgProfile()).into(imgProfile);
    Picasso.with(context).load(post.getImagePost()).into(imgPost);

    (...)
    return view;
}

【问题讨论】:

    标签: android listview delay image-loading


    【解决方案1】:

    你不能毫不拖延地做到这一点。下载速度取决于互联网连接和设备,因此必须存在一些延迟,除非您提前一页预加载图像(大多数应用程序都是这样做的)。但即便如此,快速滚动也可能会导致一些延迟。

    我建议Glide。 它比毕加索快得多。它比毕加索更好地处理下载到内存和缓存利用率。它对 GIF 效果更好,并防止讨厌的 OutOfMemoryError。当然,您可以加载占位符,直到您的图像加载等。

    它甚至是 Google 推荐的。

    干杯

    【讨论】:

    • 我正在测试 Glide,性能比 Picasso 的要好很多。正如你所说,必须存在一些延迟。我怎么能像你说的大多数应用程序那样预加载图像?
    • 长答案和许多方法可以做到这一点。我将尝试缩短逻辑并希望您通过一个简单的示例来理解 :) 在后台尝试获取所有图像并手动(从您自己的代码逻辑)下载它们以进行缓存,或者您喜欢序列化。当适配器需要加载图像时,检查它是否已经下载,是否只是从您使用的本地源加载,如果不使用 Glide。但只能使用异步方法在后台下载。希望你得到图片:)
    • 但以上真的不是强制性的。我有时觉得这是在浪费时间和代码。您可以通过拥有漂亮的占位符图像并优化您使用 Glide 远程下载的图像来实现非常酷的效果。而且 Glide 确实很好地利用了缓存。
    【解决方案2】:

    Picasso 是一种非常好的加载图像的方式,因为它具有缓存能力,但我仍然建议您阅读此answer,然后根据您的具体需求决定要使用哪个选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多