我有一个圆角布局,现在我想添加一个与父布局的高度和宽度相匹配的子视图(Imageview)。
我的问题是子视图隐藏了父视图的圆角。
如何在不使用margin属性的情况下将其约束在父布局的边框内,以便父级的圆角保持可见?
PS:我通过覆盖onDraw()
方法创建了父布局的圆角。
protected void onDraw(Canvas canvas) {
canvas.drawRect(0, 0, width, height, mpaint);
super.onDraw(canvas);
}
答案 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获取完整的源代码。