我有一个布局,里面有几个视图 - 工具栏,recyclerview和几个分隔符(它们是高度为2dp和match_parent宽度的简单视图)。我想在布局上放置一个蒙版 - 最重要的部分是整个布局的圆角(而不是视图本身)。我决定使用重载的dispatchDraw函数创建我自己的LinearLayout类,并且我设法获得了不错的结果......除了一件事 - 那些角不是抗锯齿的。
tl; dr有没有办法将antialias放到clipPath函数中?我知道可以在Paint中打开它然后使用xfermodes来掩盖布局,但是我不知道如何绘制蒙版然后绘制其他所有内容(不知道内部是什么)。
这是我的布局代码(classname,简单构造函数和Path字段除外):
@Override protected void dispatchDraw(Canvas canvas) {
if (path == null) {
path = new Path();
float margin = MyApplication.getInstance().getMetrics().density * 5;
path.addRoundRect(new RectF(margin,margin,getWidth()-margin, getHeight()-margin),
margin*2, margin*2, Path.Direction.CW);
}
canvas.clipPath(path);
super.dispatchDraw(canvas);
}
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
答案 0 :(得分:5)
尝试this SO answer,当然不是mMask.draw(canvas)
,而是由NinePatchDrawable
制作的“掩码”,您需要使用canvas.drawPath()
来呼叫Paint
使用PorterDuff.Mode.DST_IN
xfer模式设置