我试图从画布上“擦除”。就像清理画布的非常简单的测试一样,我实现了以下内容:
@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)
使屏幕完全变黑,而不是去除之前应用的调光。 The idea was taken from here
使用以下内容。
canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);
解决方案是创建一个辅助画布和位图来绘制。我的自定义视图的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);
}
其中透明Paint在构造函数中声明为
transparentPaint = new Paint();
transparentPaint.setColor(getResources().getColor(android.R.color.transparent));
transparentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
transparentPaint.setAntiAlias(true);
您需要将整个视图设置为透明,否则透明颜色将为黑色。
在您要覆盖的视图的构造函数中,将alpha设置为零。
setAlpha(0); // this is the secret.
然后,在你的onDraw()方法中,你可以清除视图:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// ...
canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);
// do you painting here
}