我正在尝试实现一个用圆角绘制自身的 LinearLayout 子类。根据我的研究,我设置setWillNotDraw(false)
并重写onDraw()
以在画布中绘制一个圆角矩形:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), drawPaint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
| Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, roundPaint);
canvas.restoreToCount(sc);
}
在哪里:
drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
drawPaint.setColor(0xffffffff);
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundPaint.setColor(0xffffffff);
DST_IN
这里似乎是正确的选项(根据 APIDemos 示例),但是应该透明的区域(圆形区域)改为黑色背景,并且孩子的角落仍然可见。这是带有 Android 4.2.2 的 Galaxy Nexus 上的结果:
有什么提示吗?
编辑:这是我想要实现的目标,对 photoshopping 的粗糙表示抱歉:)
编辑 2:我向 GitHub 添加了一个示例可运行项目:https ://github.com/venator85/RoundClippingLayout
谢谢 ;)