requestLayout()由RelativeLayout不正确地调用

时间:2015-07-19 18:45:40

标签: android

我有一个自定义FrameLayout,在xml文件中它有两个孩子(两者都是RelativeLayout并且它们相互重叠)

drawChild方法中我这样做

 protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
    if(view.equals(firstChild){
       return super.drawChild(canvas, child, drawingTime);
    }else {
     //...do some thing with mPath like adding a circle to it
     canvas.clipPath(mPath);
     return super.drawChild(canvas, child, drawingTime);
   }
}

但我从Logcat获得了这两行:

requestLayout() improperly called by android.widget.RelativeLayout{c1a8b57 V.E...... ......ID 0,0-1080,210} during second layout pass: posting in next frame
requestLayout() improperly called by android.widget.RelativeLayout{c1a8b57 V.E...... ......ID 0,0-1080,210} during layout: running second layout pass

我知道clipPath(可能重叠)有问题,因为警告通过评论此行canvas.clipPath(mPath);而消失。

任何想法?

1 个答案:

答案 0 :(得分:0)

我会做三件事:

首先,我会检查兼容性canvas.clipPath()与您的目标API版本,它应该是18或更高。

其次,我会检查你声明Path对象(mPath)的位置和方式。

第三,当你尝试使用clipPath()时,我会确保canavas已经存在。此外,它可能不是问题,但根据FrameLayout的API:子视图是在堆栈中绘制的,最近添加的子项位于顶部,因此请确保您正在使用的子项是可访问的。