Drawing "holes" in a canvas
I'm trying to draw a shape like this in the onDraw method of a custom view.
Unfortunately, I cannot "cut" the transparent circle on the canvas, (by drawing a circle with a Color.Transparent).
Should I first draw the shape in another bitmap then draw it on the canvas provided by onDraw ? Or is it a better (simpler) way to do this ?
Here is the code I tried (works with 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 : I got the exact shape I wanted while using Color.WHITE :
Solution
@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));
Note : the createBitamp and the new canvas should be moved out of the onDraw Method.
There are questions which may be revealnt for your situation :
draw path with hole ( android )
Android canvas - Draw a hole
Punch a hole in a rectangle overlay with HW acceleration enabled on View
http://www.mail-archive.com/android-developers@googlegroups.com/msg232764.html
链接地址: http://www.djcxy.com/p/68958.html上一篇: 在google maps api v3中绘制(倒置)几何圆圈
下一篇: 在画布上绘制“洞”