填充对象的交叉区域

时间:2017-02-21 14:33:27

标签: java android user-interface canvas android-canvas

我想使用Android Canvas填充矩形和圆形的交叉区域,如下图所示:

Circle and rectangle, intersection area is colored purple

我怎样才能做到这一点?

更新 这是我的代码

public static class MyView extends View {
    private Paint paint;
    public MyView(Context context) {
        super(context);
        init();
    }
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public MyView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init();
    }
    private void init() {
        paint = new Paint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(5);
        paint.setColor(Color.BLUE);
        canvas.drawRect(getRect(), paint);
        paint.setColor(Color.GRAY);
        canvas.drawCircle(250,150, 100, paint);
    }

    public Rect getRect() {
        return new Rect(100,100,400,200);
    }

}

现在:

what i get

在这种情况下,通缉的结果是:

 Wanted result

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您需要查看android.graphics.Path课程。

如果您可以使用Path定义形状,则可以使用canvas.drawPath()绘制它们。

Path有一个名为op()的方法,您可以使用它来获取两个路径的交集,如下所示:

    Path square = ...
    Path circle = ...
    Path intersect = circle.op(square, Op.INTERSECT);

使用Paint.Style FILL,您可以为两个形状的交集着色。