RecycleView加载大量图片卡顿优化

这篇具有很好参考价值的文章主要介绍了RecycleView加载大量图片卡顿优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RecycleView实现类似相册功能的时候,在加载大量图片的时候,快速滑动的时候能感到明显的卡顿,因此需要我们根据滑动状态去做优化。

一、解决思路

我们可以监听RecycleView滑动状态,当处于滑动状态时,不进行图片的加载,当滑动停止时才进行图片的加载。网上解决方法基本都是这样的,但是很多方法是调用网络框架暂停请求加载来处理的,个人认为这种方法会影响到全局的网络加载库,所以应该采用notifyItemRangeChanged方式,去通知viewholder重新加载图片。

二、代码实现

在ViewHolder里增加一个RecycleView滑动标识,如果处于滑动状态的话,就不要去加载图片,而是给imageview一个占位图

        //此处在viewholder setData方法里处理
        if (isScrolling) {
            //滚动状态时,需要清空tag 并给imageview一个占位图
            imageView.setTag(null);
            imageView.setImageResource(getResources().getDrawable(R.drawable.btn_forbid));
            return;
        } else {
            //之前没有加载过了数据直接 return
            if (imageView.getTag() instanceof String && TextUtils.equals(imageUrl,(String)imageView.getTag())) {
                return;
            }
        }
        imageView.setTag(imageUrl);
        //此处调用你自己的网络库去加载imageUrl

给RecycleView设置滑动监听,将滑动状态设置给adapter,当不在滑动时,需要手动调用notifyItemRangeChanged去通知adapter刷新数据文章来源地址https://www.toymoban.com/news/detail-713218.html

        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                //停止滑动了
                if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                    mAdapter.setScrolling(false);
                    int firstVisiblePosition = mGridLayoutManager.findFirstVisibleItemPosition();
                    int lastVisibleItemPosition = mGridLayoutManager.findLastVisibleItemPosition();
                    mAdapter.notifyItemRangeChanged(firstVisiblePosition, lastVisibleItemPosition);
                }
                //滑动状态
                if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
                    //滑动
                    mAdapter.setScrolling(true);
                }
            }

            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
            }
        });

到了这里,关于RecycleView加载大量图片卡顿优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RecycleView小结

    一级缓存:用于存放当前屏幕可显示区域的ViewHolder,目的是为了方便更新数据,以及对View操作时更加快捷 二级缓存:用于缓存最近滑动出屏幕的ViewHolder,目的是为了当用户将该View滑出屏幕外时又突然滑回来时能够快速显示,最多能缓存2个ViewHolder,不需要重新绑定数据,只

    2023年04月08日
    浏览(35)
  • RecycleView 二级列表(多级列表)

    RecyclerView做的二级列表比官方的ExpandableListView二级列表效率高一些貌似 1.自己的Adapter继承RecyclerView.Adapter 2.然后搞两个 int 类型的成员变量表示item是几级 3. List里面这个就是数据源了 只不过这个存放的类型是个接口类型的数据 自己的一级item和二级item都去实现这个接口 然后这

    2023年04月08日
    浏览(31)
  • RecycleView基本使用及常见问题汇总

    RecycleView属于android基础组件,比较常用,下面总结下其使用的基础流程及常见问题解决办法(常见问题会定期更新) 基础使用 首先在xml里引入RecycleView 编写adapter,分以下几步 1.创建自定义adapter类,创建内部类MyViewHolder,并实现RecycleView的ViewHolder,参数传递view 创建item layout,里

    2024年01月16日
    浏览(48)
  • 一个Adapter+recycleview实现多种布局,区分布局中

    最近因为需要所以学习了一下recycleview,使用Adapter修饰器修饰,使用一个Adapter+recycleview实现多种布局,而不是之前的三个Adapter在同一个recycleview中实现三个布局。点击区分布局中的gridview的图片和姓名。 嗯~,算是之前的在同一个recycleview中实现三个不同布局的升级版吧。因为

    2024年01月20日
    浏览(50)
  • Android进阶:ListView性能优化异步加载图片 使滑动效果流畅

    ListView  是一种可以显示一系列项目并能进行滚动显示的 View,每一行的Item可能包含复杂的结构,可能会从网络上获取icon等的一些图标信息,就现在的网络速度要想保持ListView运行的很好滚动流畅是做不到的 所以这里就需要把这些信息利用多线程实现异步加载 实现这样功能的

    2024年02月16日
    浏览(55)
  • 一个页面需要加载大量的图片,如何提升用户体验?

    当网站页面需要加载大量图片时,优化用户体验非常关键,以下是一些方法来提升用户体验: 图片懒加载(Lazy Loading) :只加载用户可以看到的图片,当用户向下滚动页面时,再加载其他图片。这减少了页面初始加载时间。 图片压缩 :使用工具压缩图片文件大小,而不显著

    2024年02月19日
    浏览(68)
  • Android优化RecyclerView图片展示:Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas,Kotlin(b)

    对 Android GridLayoutManager Glide批量加载Bitmap绘制Canvas画在RecyclerView,Kotlin(a)-CSDN博客 改进,用Glide批量把Bitmap加载出来,然后在RecyclerView成片成堆的绘制Canvas,此种实现是RecyclerView加载多宫格图片展示,卡顿丢帧最低的一种实现,上下滑动流畅。 Android GridLayoutManager Glide批量

    2024年04月25日
    浏览(44)
  • Android UI性能优化 检测应用中的UI卡顿

    } }; public static LogMonitor getInstance() { return sInstance; } public boolean isMonitor() { return mIoHandler.hasCallbacks(mLogRunnable); } public void startMonitor() { mIoHandler.postDelayed(mLogRunnable, TIME_BLOCK); } public void removeMonitor() { mIoHandler.removeCallbacks(mLogRunnable); } } 我们利用了HandlerThread这个类,同样利用了Loope

    2024年04月14日
    浏览(44)
  • 记录一次ScrollViewer控件 经过大量文本数据卡顿的原因

      在 WPF 中,CanContentScroll 是 ScrollViewer 控件的一个附加属性,它控制滚动视图中的内容是否按项或像素来滚动。 当 CanContentScroll 设置为 false 时,表示 ScrollViewer 控件使用逐像素的滚动方式,这意味着滚动视图中的内容会以像素为单位进行滚动。在这种情况下,如果您需要展示

    2024年02月06日
    浏览(43)
  • uni-app小程序加载图片优化

    场景: 较大的图片加载很慢,会出现较长时间的白屏,体验感差。   解决方案 :一进入页面,图片未加载成功前,进行loading…;图片加载完成后会触发@load事件;

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包