Tôi có chế độ xem tùy chỉnh và trong onDraw()
, tôi đang cố gắng thực hiện chế độ xem bitmap. Tôi có một số squareBitmap
(màu đỏ) lấp đầy toàn bộ khung nhìn và tôi có một màu circleBitmap
(màu xanh dương) hoạt động như mặt nạ. Tôi đang sử dụng chế độ: PorterDuff.Mode.DST_IN
.Mặt nạ bitmap của Android (Xfermode) để lại nền đen mờ phía sau
Kết quả tôi mong đợi là vòng kết nối ĐỎ. Tôi nhận được điều đó, nhưng tôi cũng nhận được một nền mờ đục. Tôi không muốn nền mờ đục này, thay vào đó nó phải trong suốt. Figure 1
là kết quả tôi nhận được và Figure 2
là kết quả mà tôi đang tìm kiếm.
Mã của tôi: (Tôi đã chuyển tất cả mọi thứ bên trong onDraw()
với mục đích của câu hỏi này)
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);
}
tôi đi đâu vậy? Làm thế nào tôi có thể tránh được nền mờ đen này?
Hãy thử 'DST_OUT' thay vì 'DST_IN'. Hoặc 'SRC_IN'. –
@ FrankN.Stein Không, nó không hoạt động. Bây giờ tôi nhận được vòng tròn đầy màu đen và nền đỏ. Nền màu đỏ vì 'squareBitmap', nhưng tại sao vòng tròn màu đen? Lý tưởng nhất là hình tròn phải trong suốt và do đó màu xanh (màu của bố cục nền). – Henry
Bạn sẽ tìm thấy câu trả lời ở đây: http://ssp.impulsetrain.com/porterduff.html –