我正在尝试使用 9 个可绘制的补丁来使用 PorterDuff 剪切彩色背景。我的目标图像是一个灰色的矩形。源图像是一个 9 补丁气球,它看起来像这样:
http://i.stack.imgur.com/oMthi.png
预期的结果是: 气球里面是灰色,外面是白色背景
我的 imageView 代码:
@Override protected void onDraw(Canvas canvas) {
//just some gray color background
Drawable background = getResources().getDrawable(R.color.light_gray, null);
//this is a balloon in nine patch
Drawable drawable = getDrawable();
//the result of this is white in balloon, black outside of the balloon.
drawDirectlyOnCanvas(canvas, background, drawable);
//this produces the expected result
drawWithBitmap(canvas, background, drawable);
}
private void drawWithBitmap(Canvas passInCanvas, Drawable dest, Drawable src) {
Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
dest.setBounds(0, 0, getWidth(), getHeight());
dest.draw(canvas);
((NinePatchDrawable)src).getPaint().setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
src.draw(canvas);
passInCanvas.drawBitmap(bitmap, 0, 0, null);
}
private void drawDirectlyOnCanvas(Canvas passInCavas, Drawable dest, Drawable src) {
dest.draw(passInCavas);
((NinePatchDrawable)src).getPaint().setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
src.draw(passInCavas);
}
我想使用 drawDirectlyOnCanvas,因为即使 drawWithBitmap 有效,它的效率也不高。