2017-02-21 20 views
1

Я хочу, чтобы заполнить область пересечения прямоугольника и круга, используя Android Canvas, как на изображении ниже:заполняющая область пересечения объектов

Circle and rectangle, intersection area is colored purple

Как я могу добиться этого?

Update: вот мой код

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

Что вы пробовали до сих пор? Люди здесь, чтобы помочь, а не писать свой код для вас. http://stackoverflow.com/help/how-to-ask – Aaron

ответ

2

Вам необходимо посмотреть класс android.graphics.Path.

Если вы можете определить свои фигуры с помощью Path s, вы можете нарисовать их, используя canvas.drawPath().

Path имеет метод op(), который вы можете использовать, чтобы получить пересечение двух путей, как это:

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

с микросхемой Paint.Style из FILL, вы можете окрасить пересечение двух форм.

 Смежные вопросы

  • Нет связанных вопросов^_^