Цвет вне коробки в Android, сохраняя при этом прозрачность коробки? - PullRequest
0 голосов
/ 27 сентября 2018

В моем приложении для Android есть поле, которое должно быть прозрачным, при этом оставшаяся часть рамки за пределами поля будет заполнена определенным цветом.

Как именно это можно сделать в Canvas или OpenCV иликакие-то другие средства?

1 Ответ

0 голосов
/ 27 сентября 2018

Вот пример, показывающий круг с прозрачным отверстием, вы можете реализовать то же самое, используя Rectangle вместо круга.

public class OverlayWithHoleImageView extends ImageView {

private RectF circleRect;
private int radius;

public OverlayWithHoleImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    //In versions > 3.0 need to define layer Type
    if (android.os.Build.VERSION.SDK_INT >= 11)
    {
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }
}

public void setCircle(RectF rect, int radius) {
    this.circleRect = rect;
    this.radius = radius;
    //Redraw after defining circle
    postInvalidate();
}

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if(circleRect != null) {
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(getResources().getColor(android.R.color.black));
        paint.setStyle(Paint.Style.FILL);
        canvas.drawPaint(paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        canvas.drawRoundRect(circleRect, radius, radius, paint);
    }
}

}

ссылка: Средний

...