我需要在ImageView
上裁剪角落。不要围绕它们,而是从每个角落擦除三角形。
似乎唯一的方法是覆盖onDraw
方法并使用Path
从画布中删除这些区域。问题是我没有纯色背景,所以我需要删除这些区域,但不要用一些颜色填充它们。
我使用以下代码:
@Override
protected void onDraw(Canvas canvas) {
Path path = new Path();
path.moveTo(0, 0);
path.lineTo(20, 0);
path.lineTo(0, 20);
path.close();
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawPath(path, paint);
super.onDraw(canvas);
}
但角落是黑色但不透明。你可以帮帮我吗?或者你可能知道我的任务更好的解决方案。这是它的样子。
答案 0 :(得分:7)
为了使用透明色绘制,您必须使用Paint
setXfermode
,这只有在您为画布设置位图时才有效。如果您按照以下步骤操作,则应获得所需的结果。
创建画布并设置其位图。
mCanvas = new Canvas();
mBitmap= Bitmap.createBitmap(scrw, scrh, Config.ARGB_8888);
mCanvas.setBitmap(mBitmap);
当您想要删除某些内容时,您只需要使用setXfermode。
if (isErasing)
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
else
mPaint.setXfermode(null);
现在您应该可以使用以下方法绘制透明色:
mCanvas.drawPath(yourpath, mPaint);
答案 1 :(得分:2)
您可以剪辑画布对象:
@Override
protected void onDraw(Canvas canvas) {
final Path path = new Path();
final int count = canvas.save();
path.moveTo(0, 20);
path.lineTo(20, 0);
path.lineTo(getWidth(), 0);
path.lineTo(getWidth(), getHeight());
path.lineTo(0, getHeight());
path.close();
canvas.clipPath(path);
super.onDraw(canvas);
canvas.restoreToCount(count);
}
请注意Canvas.clipPath
在启用硬件加速的Android 3.0或更高版本上无效。
答案 2 :(得分:-1)
使用此行
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
而不是
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));