0


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{//之前没有加载过了数据直接 returnif(imageView.getTag()instanceofString&&TextUtils.equals(imageUrl,(String)imageView.getTag())){return;}}
        imageView.setTag(imageUrl);//此处调用你自己的网络库去加载imageUrl

给RecycleView设置滑动监听,将滑动状态设置给adapter,当不在滑动时,需要手动调用notifyItemRangeChanged去通知adapter刷新数据

        recyclerView.addOnScrollListener(newRecyclerView.OnScrollListener(){@OverridepublicvoidonScrollStateChanged(@NonNullRecyclerView 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);}}@OverridepublicvoidonScrolled(@NonNullRecyclerView recyclerView,int dx,int dy){super.onScrolled(recyclerView, dx, dy);}});

本文转载自: https://blog.csdn.net/qq_36356379/article/details/130265962
版权归原作者 森林&迷了鹿 所有, 如有侵权,请联系我们删除。

“RecycleView加载大量图片卡顿优化”的评论:

还没有评论