布局

时间:2016-06-10 12:44:57

标签: java android

我有一个布局,里面有几个视图 - 工具栏,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);
}

1 个答案:

答案 0 :(得分:5)

尝试this SO answer,当然不是mMask.draw(canvas),而是由NinePatchDrawable制作的“掩码”,您需要使用canvas.drawPath()来呼叫Paint使用PorterDuff.Mode.DST_IN xfer模式设置