Я перезаписываю Android ImageView, чтобы углы моего изображения были прозрачными.Я могу выполнить обрезку холста в моем onDraw (Canvas canvas):
@Override
protected void onDraw(Canvas canvas) {
Path clipPath = new Path();
int w = this.getWidth();
int h = this.getHeight();
clipPath.addRoundRect(new RectF(0,0,w,h), 10.0f, 10.0f, Path.Direction.CW);
canvas.clipPath(clipPath);
super.onDraw(canvas);
}
К сожалению, сглаживание этого круглого прямоугольника невозможно, и в результате получаются ужасные углы, подобные этому:
![enter image description here](https://i.stack.imgur.com/vQ936.png)
Я знаю, что могу очистить части моего холста с помощью сглаживания, используя Paint
и PorterDuff.Mode.CLEAR
, чего я не знаю, так это указать закругленные углы как область, которую нужно стереть.Я ищу что-то вроде этого:
@Override
protected void onDraw(Canvas canvas) {
//superclass will draw the bitmap accordingly
super.onDraw(canvas);
final Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
//this will erase a round rectangle, I need the exact inverse
canvas.drawRoundRect(rect, rx, ry, paint);
}
Есть ли способ "стереть" не круглый прямоугольник, а обратный, то есть круглые углы?А что, если я просто хочу стереть один из углов?