キャンバスから「消去」しようとしています。キャンバスをクリアする非常に簡単なテストと同じように、私は以下を実装しました。
_@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)
は、以前に適用された調光を削除するのではなく、画面を完全に黒くします。 アイデアはここから取られました
以下を使用してください。
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);
}
ここで、transparentPaintはインストラクターで次のように宣言されています
transparentPaint = new Paint();
transparentPaint.setColor(getResources().getColor(Android.R.color.transparent));
transparentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
transparentPaint.setAntiAlias(true);
ビュー全体を透明に設定する必要があります。そうしないと、透明色が黒になります。
上書きするビューのコンストラクターで、アルファをゼロに設定します。
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
}