背景
一天,搭档告知笔者,在使用了自定义Button后,RecyclerView的onScroll回调一直被重复回调,导致程序运行异常。
本文地址:https://blog.csdn.net/Xiong_IT
作者:MichaelX
排查
查看该自定义控件,主要重写了onDraw方法,发现引发异常的代码在于循环调用了setCompoundDrawables
去更新按钮。
原因
public void setCompoundDrawables(@Nullable Drawable left, @Nullable Drawable top,
@Nullable Drawable right, @Nullable Drawable bottom) {
Drawables dr = mDrawables;
// 忽略代码
resetResolvedDrawables();
resolveDrawables();
applyCompoundDrawableTint();
invalidate();
requestLayout();
}
setCompoundDrawables
会调用requesLayout()
导致父控件不停重新排版,导致onScroll不停回调,异常原因找到。