我有一个Custom ViewGroup,我重写onLayout方法来布局它的子节点。每次onLayout都会调用一些孩子需要进行布局。 问题是,当我调用requestLayout()时,从上次调用中显示我没有布局它们的子项。
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
.
.
.
// calculate a and b parameter
for (int i = a; i < b ; i++) {
getChildAt(i).layout(l, t ,r ,b );
}
}
问题是如何隐藏孩子的布局或清除ViewGroup和重新布线儿童? 或任何其他解决方案......
答案 0 :(得分:0)
万一仍有问题,我的解决方案是解决onLayout中的所有子视图:
或者,others建议您可以覆盖onDraw并清除画布:
override fun onDraw(canvas: Canvas?) {
// clear if new layout to get rid of unused views:
if(clearCanvas) {
canvas?.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
clearCanvas = false;
}
super.onDraw(canvas)
}
当您知道情况已发生变化时,请在onLayout中设置clearCanvas = true
,然后调用invalidate()
。
但是,我无法通过它调用我的onDraw()函数!因此,虽然看起来更干净,但我仍然缺少某些东西...