在画布上绘制“洞”

我试图在自定义视图的onDraw方法中绘制这样的形状。

不幸的是,我不能“剪切”画布上的透明圆圈(通过用Color.Transparent绘制圆圈)。

我应该首先在另一个位图中绘制形状,然后在onDraw提供的画布上绘制它? 或者它是一个更好(更简单)的方法来做到这一点?

这是我尝试过的代码(适用于Color.WHITE):

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.TRANSPARENT);
mPaint.setStrokeWidth(4);
mPaint.setStyle(Style.STROKE);

canvas.drawColor(getResources().getColor(R.color.black_overlay));
canvas.drawCircle(-3*(this.getBottom()-this.getTop())/4, (this.getTop()+this.getBottom())/2, this.getBottom()-this.getTop(), mPaint);

PS:使用Color.WHITE时,我得到了想要的确切形状: 使用Color.WHITE实现的结果

@Override
public void onDraw(Canvas canvas)
{
    mBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
    mCanvas = new Canvas(mBitmap);
    mCanvas.drawColor(getResources().getColor(R.color.black_overlay));
    mCanvas.drawCircle(-3*(getHeight())/4, (getHeight())/2, getHeight(), mPaint);
    canvas.drawBitmap(mBitmap, 0, 0, null);
}
with
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mPaint.setStrokeWidth(4);
    mPaint.setStyle(Style.STROKE);
    mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));

注意:createBitamp和新的画布应该移出onDraw方法。


有些问题可能会针对您的情况进行揭示:

绘制带孔的路径(android)

Android画布 - 画一个洞

在视图上启用硬件加速的矩形覆盖图中打孔

http://www.mail-archive.com/android-developers@googlegroups.com/msg232764.html

链接地址: http://www.djcxy.com/p/68957.html

上一篇: Drawing "holes" in a canvas

下一篇: Draw Circle at Center of Canvas