子视图不能修复父形状

时间:2014-11-02 16:04:00

标签: android android-layout

我有一个圆角布局,现在我想添加一个与父布局的高度和宽度相匹配的子视图(Imageview)。

我的问题是子视图隐藏了父视图的圆角。

enter image description here

如何在不使用margin属性的情况下将其约束在父布局的边框内,以便父级的圆角保持可见?

PS:我通过覆盖onDraw()方法创建了父布局的圆角。

我的代码:

protected void onDraw(Canvas canvas) {
    canvas.drawRect(0, 0, width, height, mpaint);
    super.onDraw(canvas);
}

3 个答案:

答案 0 :(得分:2)

在我看来,您可以将您的子视图放入CardView(在支持v7中),实际上是FrameLayout,但只需设置一行代码即可处理角落: / p>

app:cardCornerRadius="3dp"

无论子视图是什么,它都可以使用您设置的半径剪切角落。

答案 1 :(得分:0)

我建议你在"圆角处添加填充"视图。这可以是所有侧面,底部和顶部或左侧和右侧的填充。取决于最适合你的。

我无法想到比这更简单的方法。您的onDraw方法看起来很好,首先是背景而不是子视图。

答案 2 :(得分:0)

当您将一个孩子添加到ViewGroup时,该孩子正在ViewGroup上方绘制,因此您的圆角不会生效。

为了实现目标,您必须在布局中的某个路径上执行剪裁。这听起来有点复杂,但实际上并非如此。

基本上,您可以将剪辑理解为“切断”布局中的某些部分。

RectF rect = new RectF(0, 0, width, height);
path = new Path();
path.addRoundRect(rect, cornerRadius, cornerRadius, Direction.CW);

canvas.clipPath(path); // clipping here
// now anything that is outside this path will be "clipped", i.e. not drawn

您可以参考this获取完整的源代码。