1、在Adapter的onBindViewHolder方法中做一个开关控制,当为true时加载图片,否则ImageView添加占位图片。

   protected boolean isScrolling = true;
   @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
        if (isScrolling) {
            // 这里可以用Glide、Picasso等网络图片加载库
        } else {
            holder.ImageView.setImageResource(占位图);
        }
        super.onBindViewHolder(holder, position);
    }

2、在UI层做 onScrollStateChanged()的监听事件,if (newState == SCROLL_STATE_IDLE) 以及 y < 10 那么刷新item并且打开可以加载图片的开关。y < 10 表示RecyclerView滚动的速度趋近于停止时。

   private int y = 0;

   RecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
             /*正在拖拽*/
             // RecyclerView.SCROLL_STATE_DRAGGING:
             /*滑动停止*/
             // RecyclerView.SCROLL_STATE_IDLE:
             /*惯性滑动中*/
             // RecyclerView.SCROLL_STATE_SETTLING:
            if (newState == SCROLL_STATE_IDLE && y < 10) {
                // 滚动静止时才加载图片资源
                adapter.setScrolling(false);
                // 调用onBindViewHolder重新渲染item视图
                adapter.notifyDataSetChanged();
            } else{
                adapter.setScrolling(true);
            }
            super.onScrollStateChanged(recyclerView, newState);
        }

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

3、解决刷新视图时可能会出现闪烁跳动的问题,在Adapter中加入

  @Override
    public long getItemId(int position) {
        return position;
    }

最后修改:2022 年 07 月 22 日
如果觉得我的文章对你有用,请随意赞赏