Bad*_*ano 2 transparency android canvas view
图像是透明的,我会变黑......
我已经做了同样的事情,用位图画布上的另一个图像遮盖图像,它工作得很好,但是当我尝试在自定义视图的 onDraw 内部遮盖时,它不起作用。
我尝试了一切,在图像蒙版、路径、其他图像之前绘制矩形,所有东西都在应该透明的地方保持黑色。我搜索了人们在使用 CLEAR 模式时遇到的许多其他问题,但没有成功。
请帮忙!
mBGPaint = new Paint();
mBGPaint.setStyle(Paint.Style.FILL);
mBGPaint.setColor(Color.TRANSPARENT);
mRectSrc = new Rect();
mRectDst = new Rect();
mask = BitmapFactory.decodeResource(getResources(), R.drawable.big_balloon_path);
maskPaint = new Paint();
maskPaint.setFilterBitmap(true);
maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mRectSrc.set(0, 0, mask.getWidth(),mask.getHeight() );
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mRectDst.set(0,0,this.getMeasuredWidth(),this.getMeasuredHeight());
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight(), mBGPaint);
canvas.drawBitmap(mask, mRectSrc, mRectDst, maskPaint);
Run Code Online (Sandbox Code Playgroud)
您可能需要在视图初始化时打开软件渲染:
setLayerType(LAYER_TYPE_SOFTWARE, null);
Run Code Online (Sandbox Code Playgroud)
当使用硬件渲染(这是默认设置)时,许多 Android 绘图命令会默默失败或产生不正确的结果。