arkasındaki opak siyah arkaplanını geride bırakır. Özel bir görünümüm var ve onDraw()
'da, bitmap maskelemeyi gerçekleştirmeye çalışıyorum. Ben tüm görünümü dolduran bir squareBitmap
(kırmızı renk) var ve ben maske gibi davranan bir circleBitmap
(mavi renk) var. Modu kullanıyorum: PorterDuff.Mode.DST_IN
.Android Bitmap Masking (Xfermode),
Beklediğim sonuç, KIRMIZI dolu bir dairedir. Bunu anlıyorum, ama ayrıca siyah opak bir arka plan elde ediyorum. Bu opak arka planını istemiyorum, şeffaf olmalı. Figure 1
aldığım sonucu ve Figure 2
aradığım sonuçtur.
Benim kod: (Bu soru amacı için onDraw()
içindeki her şeyi taşımış)
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);
}
Nerede yanlış gidiyorum? Bu siyah opak arka planı nasıl önleyebilirim?
deneyin 'yerine DST_IN'' arasında DST_OUT'. Veya "SRC_IN". –
@ FrankN.Stein Hayır, çalışmıyor. Şimdi siyah dolu daireyi ve kırmızı bir arka planı aldım. 'SquareBitmap' nedeniyle arkaplan kırmızı, ancak daire neden siyah? İdeal olarak, daire şeffaf olmalı ve dolayısıyla mavi (arka plan düzeninin rengi) olmalıdır. – Henry
Burada bir cevap bulabilirsiniz: http://ssp.impulsetrain.com/porterduff.html –