0

我正在尝试使用 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 有效,它的效率也不高。

4

0 回答 0