【问题标题】:How to make canvas.drawBitmap transparent?如何使 canvas.drawBitmap 透明?
【发布时间】:2015-12-03 20:02:32
【问题描述】:

我正在尝试创建动画壁纸。

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

我有一个如下所示的 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,但它没有帮助。

【问题讨论】:

    标签: android canvas bitmap


    【解决方案1】:
    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); 
    

    【讨论】:

    • 谢谢你的回复,我之前确实试过这个。 setAlpha 将设置图像的整个透明度。我想要的是保持图像的透明部分透明,而图像的非透明部分不透明。
    【解决方案2】:

    您需要使用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 了解各种混合选项(有很多...)

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 1970-01-01
      • 2011-11-17
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多