我有一个自定义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);
而消失。
任何想法?
答案 0 :(得分:0)
我会做三件事:
首先,我会检查兼容性canvas.clipPath()与您的目标API版本,它应该是18或更高。
其次,我会检查你声明Path对象(mPath)的位置和方式。
第三,当你尝试使用clipPath()时,我会确保canavas已经存在。此外,它可能不是问题,但根据FrameLayout的API:子视图是在堆栈中绘制的,最近添加的子项位于顶部,因此请确保您正在使用的子项是可访问的。