2011-11-01 34 views
9

Tôi muốn tạo mặt nạ alpha động với các hình dạng có thể vẽ dưới dạng hình tròn hoặc bất kỳ thứ gì và áp dụng nó cho văn bản được vẽ trên Android. Dưới đây là một ví dụ về những gì tôi muốn: alpha maskCách áp dụng mặt nạ alpha động cho Văn bản trên Android

tôi đang cố gắng để làm cho nó với setXfermode(new PorterDuffXfermode(Mode.SRC_IN)), nhưng tôi không thể làm cho nó làm việc. Đây là mã tôi có trong onDraw(Canvas canvas) phương pháp:

Paint paint = new Paint(); 
paint.setAntiAlias(true); 
canvas.drawARGB(0, 0, 0, 0); 
paint.setColor(Color.WHITE); 
canvas.drawCircle(50, 50, 50, paint); 

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
paint.setColor(Color.RED); 
canvas.drawText("hello", 0, 50, paint); 

Cảm ơn trước sự giúp đỡ của bạn

Trả lời

10

Hãy thử tạo nguồn và mặt nạ của bạn bitmap riêng. Hầu hết các ví dụ tôi đã thấy liên quan đến việc sử dụng hai bitmap và sử dụng drawBitmap để thực hiện việc che dấu.

Tôi sử dụng PorterDuff.Mode.DST_IN cho sơn, sau đó vẽ hình ảnh nguồn (không có sơn) theo sau là hình ảnh mặt nạ (có sơn). Một cái gì đó như thế này:

 Bitmap bitmapOut = Bitmap.createBitmap(sizeX, sizeY, 
       Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmapOut); 

     Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     xferPaint.setColor(Color.BLACK); 

     xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 

     canvas.drawBitmap(sourceImage, 0, 0, null); 
     canvas.drawBitmap(alphaMask, 0, 0, xferPaint); 

Tại thời điểm này, bitmapOut chứa hình ảnh mặt nạ của tôi.

Các vấn đề liên quan