RecyclerView如何实现滑动过程中暂停图片加载

前言在提到Android的性能优化过程中,不得不说到的是列表。在列表中图片处理是尤为关键的一步,如何在列表滑动的过程中暂停图片的加载,使我们的列表在滑动过程中不卡顿,是本篇的研究重点。目前,我们以Android界中几个常用的图片加载框架为例,RecyclerView为载体,来研究一下如何实现。


首先,我们我们需要对RecyclerView添加滑动监听,以便处理不同的表现:

RecyclerView.SCROLL_STATE_IDLE //空闲状态

RecyclerView.SCROLL_STATE_FLING //滚动状态

RecyclerView.SCROLL_STATE_TOUCH_SCROLL //触摸后状态

这里我们只需要判断其是否为空闲状态即可:

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {

        }else {

        }
    }
});

接下来,就是我们需要去控制图片加载框架,使其暂停加载


1、Glide

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {
            Glide.with(mContext).resumeRequests();
        }else {
            Glide.with(mContext).pauseRequests();
        }
    }
});


2、
Fresco

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {
            Fresco.getImagePipeline().resume();
        }else {
            Fresco.getImagePipeline().pause();
        }
    }
});


3、
Picasso

值得注意的是,在Picasso框架中,我们要指定是哪一个ImageView需要在滑动过程中暂停加载,所以我们需要加一个tag:

⑴ Object tag = new Object();

⑵ Picasso.with(mContext)

.load(url)

.tag(tag)

.into(imageView);

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {
            Picasso.with(mContext).resumeTag(tag);
        }else {
            Picasso.with(mContext).pauseTag(tag);
        }
    }
});


当然,这样在代码中动态添加肯定不够方便简洁,如何减少我们的工作量呢,没错,就是自定义View。

我们以Glide框架为例,我们nit的时候,对其添加自己的滑动监听

《RecyclerView如何实现滑动过程中暂停图片加载》《RecyclerView如何实现滑动过程中暂停图片加载》

这里写一个ImageAutoLoadScrollListener,继承自onScrollListener:

《RecyclerView如何实现滑动过程中暂停图片加载》《RecyclerView如何实现滑动过程中暂停图片加载》

《RecyclerView如何实现滑动过程中暂停图片加载》《RecyclerView如何实现滑动过程中暂停图片加载》

那么这样的话,我们整个可以监听滑动状态的自定义RecyclerView就全部写完了,其他两种图片加载框架的处理基本操作相似,这里就不再进行赘述。


祝各位生活愉快《RecyclerView如何实现滑动过程中暂停图片加载》《RecyclerView如何实现滑动过程中暂停图片加载》《RecyclerView如何实现滑动过程中暂停图片加载》

    原文作者:Koro1丶
    原文地址: https://blog.csdn.net/qq_35937681/article/details/73742096
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞