如何使canvas.drawBitmap透明?

时间:2015-12-03 20:02:32

标签: android canvas bitmap

我正在尝试制作动画壁纸。

基本上我的壁纸有一些背景图片和几张前景图片。 我想在不同背景的前景图片之间切换。

我有一个看起来像这样的Draw方法:

 protected void onDraw(Canvas canvas){
        super.onDraw(canvas);
        canvas.drawColor(0);
        canvas.drawBitmap(background,0,0,null);

        canvas.drawBitmap(foreground,x,y,null);
        canvas.save();

}

我的前景图片是一个有很多透明空间的png。

我加载了这样的前景图片:

 foreground=decodeSampledBitmapFromResource(getResources(), R.drawable.c1, 440,320);

从这里的教程中获取decodeSampledBitmapFromResource方法:https://developer.android.com/training/displaying-bitmaps/load-bitmap.html

我的问题是前景会显示白色,它应该显示透明色,因此用丑陋的白色矩形覆盖背景。

我想知道是否有人建议让我透明。 我已经尝试过设置options.inPreferredConfig = Bitmap.Config.ARGB_8888;对于BitmapFactory,但它没有帮助。

2 个答案:

答案 0 :(得分:0)

Paint paint = new Paint();
paint.setAlpha(70); // you can change number to change the transparency level
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.someDrawable);
canvas.drawBitmap(image, x, y, paint); 

答案 1 :(得分:0)

您需要使用Paint并将混合模式设置为SRC_OVER

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint();
    canvas.drawColor(0);
    canvas.drawBitmap(background,srcRect,dstRect,paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
    canvas.drawBitmap(foreground,srcRect2,dstRect2,paint);
    canvas.save();
}

请参阅PorterDuff.Mode了解各种混音选项(有很多......)