6

在我的 android 应用程序中,我想绘制两个图像 - img1 和 img2。首先,我会在Canvas. 之后,我将在Canvas其上绘制与 img2 重叠的 img1。Img1 包含透明部分。问题是,img1 的透明部分显示为黑色,但我希望 img2 通过 img1 的透明部分可见。我无法做到这一点。请帮我解决这个问题。谢谢你。

代码:

protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Bitmap b = BitmapFactory.decodeResource(getResources(),
                R.drawable.white_bg);    //img2
        canvas.drawBitmap(b, 0, 0, null);
        canvas.save();

        canvas.drawBitmap(realImage, 0, 0, null);  //img1
    }
4

3 回答 3

2

bitmap.setHasAlpha(true)加载位图后尝试。

于 2015-06-10T22:07:33.913 回答
1

在对我的代码进行一些修改后,我得到了输出。这是我使用的代码。

  public class FrameView extends View{

    Bitmap bitmap = null;

    public FrameView(Context context) {
            super(context);
            this.context = context;

        }

        public FrameView(Context context, AttributeSet attrs) {
            super(context, attrs);
            bitmap = Bitmap.createBitmap(this.screenWidth, this.screenHeight,
                    Bitmap.Config.ARGB_8888);

        }

        public FrameView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            this.context = context;
        }

    @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if (isTouchGestures) {
                invalidate();
                mImgDrawables.get(0).draw(canvas);
                canvas.drawBitmap(bitmap, 0, 0, null);
            }

        }

    //this function is invoked from my activity which is using this view
    public void setFrame(int frame) {

            bitmap = BitmapFactory.decodeStream(getResources().openRawResource(
                    frame));

            bitmap = Bitmap.createScaledBitmap(bitmap, this.screenWidth,
                    this.screenHeight, true);

        }
    }
于 2013-10-04T07:54:02.797 回答
0

使用 Paint 对象设置透明度的 Alpha 通道。

Paint alphaChannel = new Paint()
alphaChannel.setAlpha(100) // set alpha to 100 for complete transparent
canvas.drawBitmap(b, 0, 0, alphaChannel);
于 2013-10-03T08:20:59.037 回答