Android滑动列表加载大量图片时候的优化
16lz
2021-01-26
1 正在滚动的时候停止加载图片
2 滚动到顶部和底部的时候,加载图片
3 滑动速度降低到一定速率的时候,加载图片
4 到底部时候加载更多
/** * Created by android on 2018/1/9. * * 快速滑动时候,停止加载图片, 加载更多 */public abstract class SmartRecyclerViewScrollLsnr extends RecyclerView.OnScrollListener { private static final String TAG = "SmartRecyclerViewScroll"; private Context mContext; private int previousFirstVisibleItem = 0; private long previousEventTime = 0; private double speed = 0; private LinearLayoutManager mLinearLayoutManager; public SmartRecyclerViewScrollLsnr(Context context) { mContext = context; } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) {// if (newState == RecyclerView.SCROLL_STATE_IDLE) {// resumeImageLoad();// } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!recyclerView.canScrollVertically(1)){//不能再向上,滑动到底部 resumeImageLoad(); onLoadMore(); return; } if (!recyclerView.canScrollVertically(-1)){//不能再向下 resumeImageLoad(); return; } //速度降低时候,也加载 if (NullUtil.isNull(mLinearLayoutManager)){ mLinearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); } int firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); if (previousFirstVisibleItem != firstVisibleItem) { long currTime = System.currentTimeMillis(); long timeToScrollOneElement = currTime - previousEventTime; speed = ((double) 1 / timeToScrollOneElement) * 1000; previousFirstVisibleItem = firstVisibleItem; previousEventTime = currTime; if (speed > 6) { pauseImageLoad(); } else { resumeImageLoad(); } Log.d(TAG, "Speed: " + speed + " elements/second"); } } private void pauseImageLoad() { try { if (mContext != null) Glide.with(mContext).pauseRequests(); } catch (Exception e) { e.printStackTrace(); } } private void resumeImageLoad() { try { if (mContext != null && Glide.with(mContext).isPaused()) Glide.with(mContext).resumeRequests(); } catch (Exception e) { e.printStackTrace(); } } /** * 提供一个抽闲方法,在Activity中监听到这个EndLessOnScrollListener * 并且实现这个方法 * */ public abstract void onLoadMore();}
更多相关文章
- Android(安卓)浅析 ContentProvider (四) 启动原理
- Android(安卓)滑动效果入门篇(一)—— ViewFlipper
- android --- Afianl框架里面的FinalBitmap加载网络图片
- [Android算法] bitmap 将图片压缩到指定的大小
- Android(安卓)ViewPager事件滑动监听修改
- 将图片存储到Sqlite和取出
- Android(安卓)绘制一个Loading动画__向图片中缓慢填充颜色,从而
- Android(安卓)如何实现欢迎界面(Splash Screen)
- Android(安卓)OKHttp3的使用和下载/上传图片