Android RecyclerView 在 回滑的时候 自定义 imageview 圆角图片失效,布局中使用SmartRefreshLayout 进行刷新,在加载的时候圆角图片不生效,再回滑的时候,圆角图片失效
可能是由于Recycler View的回收重用机制导致的。当Recycler View滑动时,它会重用之前滑出屏幕的视图来显示新的内容,以提高性能。之前设置的圆角图片可能会被新的内容所替换,导致圆角失效。
可以在RecyclerView的Adapter中的onBindViewHolder方法中重新设置圆角图片
可参考
// 在Adapter的onBindViewHolder方法中重新设置圆角图片
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// 设置图片圆角
setRoundedImage(holder.imageView, imageUrlList.get(position));
}
// 设置圆角图片
private void setRoundedImage(ImageView imageView, String imageUrl) {
Glide.with(context)
.load(imageUrl)
.transform(new RoundedCorners(20))
.into(imageView);
}
// 在刷新时清空RecyclerView的缓存
refreshLayout.setOnRefreshListener(() -> {
recyclerView.getRecycledViewPool().clear();
// 重新设置圆角图片
adapter.notifyDataSetChanged();
refreshLayout.finishRefresh();
});
建议用cardview包裹一下,不需要自定义圆角控件
这个页面使用的了SmartRefreshLayout,详情见这里Android智能下拉刷新框架-SmartRefreshLayout
虽然是比较有名的第三方库,但是bug也是可能有的。所以开始阅读他的源码,但是在阅读了他的源码以后,发现没什么问题。通过打断点发现,在页面发生滚动的时候它的方法根本就没有调用。
自定义圆角设置时效。很可能是滑动时缓存复用失效导致。或者圆角的绘制太耗费性能,在固定的时间绘制未完成,造成圆角缺失导致。可以从
性能优化和缓存方面检查下。