【发布时间】:2017-11-10 13:03:02
【问题描述】:
我有一个RelativeLayout,它需要有圆角的左上角和右上角。我可以使用在 XML 中定义的带有角 topLeftRadius 和 topRightRadius 的可绘制背景来做到这一点。但是... 这个RelativeLayout 还需要有一个背景,它是一个带有平铺位图和形状组合的图层列表,并且平铺位图在可绘制 XML 中没有角参数。所以我的想法是使用以下代码制作RelativeLayout:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
path.reset();
rect.set(0, 0, w, h);
path.addRoundRect(rect, radius, radius, Path.Direction.CW);
path.close();
}
@Override
protected void dispatchDraw(Canvas canvas) {
int save = canvas.save();
canvas.clipPath(path);
super.dispatchDraw(canvas);
canvas.restoreToCount(save);
}
遗憾的是没有发生剪辑,我希望它会剪辑我的 RelativeLayout 的所有四个角,但什么也没发生。 “onSizeChanged”和“dispatchDraw”方法都被调用了,我测试过。我也试过关闭硬件加速,但什么也没做。
我的RelativeLayout 是更大布局的一部分,该布局在FrameLayout 的子类中膨胀,然后在RecyclerView 中连续使用该子类,如果这有任何改变的话。
【问题讨论】:
标签: java android android-layout android-view android-custom-view