在CustomViewGroup中重新布局子项

时间:2015-09-25 10:33:29

标签: android android-custom-view android-viewgroup

我有一个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和重新布线儿童? 或任何其他解决方案......

1 个答案:

答案 0 :(得分:0)

万一仍有问题,我的解决方案是解决onLayout中的所有子视图:

  • 设置可见性= View.VISIBLE并在我要显示的页面上调用布局
  • 设置可见性= View.GONE来隐藏我想隐藏的对象(并且不要在其上调用布局)。如果他们已经在那里,就不能不布置它们。

或者,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()函数!因此,虽然看起来更干净,但我仍然缺少某些东西...