gpt4 book ai didi

android - 如何删除(透明化)Android Canvas 中的一个自定义区域?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:06 25 4
gpt4 key购买 nike

我正在覆盖 Android 的 ImageView 以使图像的角部透明。我可以在我的 onDraw(Canvas 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

我知道我可以使用 PaintPorterDuff.Mode.CLEAR 通过抗锯齿清除部分 Canvas ,我不知道的是将圆角指定为要删除的区域。我正在寻找这样的东西:

@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);
}

有什么方法可以“删除”不是圆角矩形,而是相反的圆角,即圆角?如果我只想删除其中一个角怎么办?

最佳答案

使用具有透明颜色的 BitmapShader 为您的 Paint 对象绘制。
如果您只想删除其中一个角,请尝试将其绘制为 Path 而不是 RoundRect。

protected void onDraw(Canvas canvas) {
BitmapShader bitmapShader = new BitmapShader(<original drawable>, TileMode.CLAMP, TileMode.CLAMP);

Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(0xFF000000);
paint.setShader(bitmapShader);

canvas.drawRoundRect(rect, rx, ry, paint);

}

关于android - 如何删除(透明化)Android Canvas 中的一个自定义区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9278432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com