Androidcanvas清晰透明

我正试图从canvas上“抹去”。 就像清理canvas的一个非常简单的testing一样,我已经实现了以下内容:

@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.argb(140, 0, 0, 0)); canvas.drawColor(0, Mode.CLEAR); } 

Color.argb(140, 0, 0, 0)将该视图的视图设置为灰显。 drawColor(0, Mode.CLEAR)使屏幕完全变黑,而不是去除之前应用的调光。 这个想法是从这里拿走的

Solutions Collecting From Web of "Androidcanvas清晰透明"

使用以下内容。

  canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR); 

解决scheme是创build一个辅助canvas和位图来绘制。 我的自定义视图的onSizeChanged()方法看起来像

 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); bitmap.eraseColor(Color.TRANSPARENT); temp = new Canvas(bitmap); } 

和onDrawMethod看起来像

 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); temp.drawColor(Color.argb(80, 0, 0, 0)); temp.drawCircle(centerPosX, centerPosY, 200, transparentPaint); canvas.drawBitmap(bitmap, 0, 0, null); } 

其中transparentPaint在onstructor中声明为

 transparentPaint = new Paint(); transparentPaint.setColor(getResources().getColor(android.R.color.transparent)); transparentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); transparentPaint.setAntiAlias(true);