android 中 PathEffect 的处理问题

发布于 2022-09-06 04:47:59 字数 2130 浏览 48 评论 0

我要画出一块由不规则path组成的区域,并且这个path因为视觉效果需要设置圆角,我就通过Paint.setPathEffect(new CornerPathEffect(300)); 给设置了圆角,但是在通过这个path组合成区域的时候因为这个圆角的设置整个区域都有圆角的效果了,这不是我想要的。
图片描述

如图,黑色是我的path,红色是我设置了圆角的由path组成的区域。四个角落都有了圆角的效果,这不是我想要的。
而蓝色区域是未设置圆角的,此时path一侧的区域就不符合标准了。

以下是我的全部代码


public class PathEffectView extends View {

    private  Path line;
    private  Paint linePaint;


    private  Path range;
    private  Paint rangePaint;
    private final Paint paint3;

    public PathEffectView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);

        linePaint.setStrokeWidth(10);
        linePaint.setColor(Color.BLACK);
        linePaint.setStyle(Paint.Style.STROKE);
        linePaint.setPathEffect(new CornerPathEffect(300));

        rangePaint = new Paint(linePaint);

        rangePaint.setColor(Color.BLUE);
        rangePaint.setStyle(Paint.Style.FILL);


        paint3 = new Paint(linePaint);
        paint3.setColor(Color.RED);

    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        line = new Path();
        range = new Path();

        line.moveTo(0,1000);
        line.rLineTo(200,-150);
        line.rLineTo(200,300);
        line.rLineTo(200,-350);
        line.rLineTo(200,320);
        line.rLineTo(200,-370);
        line.lineTo(w,800);


        range.addPath(line);
        range.lineTo(w,h);
        rangePaint.setPathEffect(null);
        range.lineTo(0,h);
        range.close();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.save();
        canvas.translate(0,-20);
        canvas.drawPath(line, linePaint);
        canvas.restore();


        canvas.drawPath(range, rangePaint);
        canvas.drawPath(range,paint3);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱人如己 2022-09-13 04:47:59

通过 PaintgetFillPath(src,dst)方法可以获得转换后的path然后用新的path来进行区域的填充。

详见 hencoder
2.8.1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文