私はカスタムビューを持っており、onDraw()
ではビットマップマスキングを実行しようとしています。私はsquareBitmap
(赤色)を全景に塗りつぶしていて、マスクとして機能するcircleBitmap
(青色)を持っています。私はモードを使用しています:PorterDuff.Mode.DST_IN
。Androidビットマップマスキング(Xfermode)は、背景が不透明な黒い背景を残します
私が期待しているのは、赤く塗りつぶされたサークルです。私はそれを得るが、私はまた黒い不透明な背景を得る。私はこの不透明な背景を望んでいない、むしろ透明でなければならない。 Figure 1
は私が得た結果であり、Figure 2
は私が探している結果です。
私のコード:(私はこの質問の目的のためにonDraw()
内部のすべてを移動した)私が間違っているつもりです
protected void onDraw(Canvas canvas) {
final int width = canvas.getWidth();
final int height = canvas.getHeight();
Bitmap circleBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas circleCanvas = new Canvas(circleBitmap);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setStyle(Paint.Style.FILL_AND_STROKE);
p.setColor(Color.BLUE);
circleCanvas.drawCircle(width/2, height/2, width/2, p);
p.setColor(Color.RED);
Bitmap squareBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
Canvas squareCanvas = new Canvas(squareBitmap);
final Rect squareRect = new Rect(0, 0, width, height);
squareCanvas.drawRect(squareRect, p);
Paint q = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawBitmap(squareBitmap, 0, 0, q);
q.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(circleBitmap, 0, 0, q);
q.setXfermode(null);
}
?この黒い不透明な背景をどうやって避けることができますか?
'の代わりに' DST_IN'のDST_OUT'をお試しください。または 'SRC_IN'。 –
@ FrankN.Steinいいえ、動作していません。今、私は黒い塗りつぶされた円と赤い背景を取得します。バックグラウンドは 'squareBitmap'のために赤ですが、なぜ黒丸ですか?理想的には、円は透明でなければならず、従って青色(背景レイアウトの色)でなければならない。 – Henry
ここに答えがあります:http://ssp.impulsetrain.com/porterduff.html –