Glide-在滚动RecyclerView时暂停图片加载

3

我有一个从服务器加载图片的RecyclerView。

当我滚动时,滚动相当卡顿。

我正在使用Glide加载图片。

我感觉图片每次滚动RecyclerView时都会被重新加载。

所以请问有谁能告诉我如何停止在滚动时加载图片...

谢谢。

2个回答

4
你可能正在做一些奇怪的事情,比如在图像加载完成时调整视图大小。确保在加载图像时不会触发布局调用或执行其他昂贵的操作。几乎总是可以使用Glide在仍然加载图像的情况下获得相对平滑的滚动。
话虽如此,你可以使用pauseRequests()resumeRequests()来在用户开始/停止滚动时停止/启动图像加载:
// Scrolling starts.
Glide.with(fragment).pauseRequests();
...
// Scrolling stops.
Glide.with(fragment).resumeRequests();

我在Android 4.4和5中测试了我的应用程序。在5.0中,滚动时有些卡顿,但在4.4中则很流畅。那么这是版本问题还是其他原因呢? - user2969165
5.0版本的设备有所不同吗?通常情况下,L+更加流畅,因为它使用ART,该技术比dalvik更有效地处理垃圾回收。 - Sam Judd
我无法理解你在问什么(5.0上的设备是否不同)。 - user2969165
他的意思是例如:如果4.4设备是Galaxy S4,而5.0是Nexus 6;或者两个不同的Galaxy S4上都运行着4.4和5.0? - TWiStErRob
一旦执行 Glide.with(fragment).pauseRequests(),你也应该执行 Glide.with(fragment).load(file).into(imageView),否则它将不会暂停任何东西。 - VinceStyling

1
Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        Recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                    Glide.with(MainActivity.this).resumeRequests();
                }
                if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
                    Glide.with(MainActivity.this).pauseRequests();
                }
                super.onScrollStateChanged(recyclerView, newState);

            }
        });
    }
});
t.start();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接