2

我想在 ImageView 上放置一个透明的 SurfaceView。我在 SurfaceView 子类构造函数中有以下内容

setZOrderOnTop(true);    // necessary
SurfaceHolder h = getHolder();
h.setFormat(PixelFormat.TRANSPARENT);

我在 onDraw() 函数的开头也有这个

canvas.drawColor( 0, PorterDuff.Mode.CLEAR );

然而,我得到的只是一个黑色背景,它阻挡了图像。

有任何想法吗?

PS,我也试过这个而不是drawColor(),但无济于事

Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
canvas.drawPaint(paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC));
4

2 回答 2

2

我知道,这篇文章已经有一年了,但是你将颜色设置为 0,它代表黑色。利用

canvas.drawColor( Color.TRANSPARENT, PorterDuff.Mode.CLEAR );

使其透明。

于 2013-08-25T20:59:20.313 回答
1

SurfaceViews 不能以这种方式透明。如果您使用的是 API 11 或更高版本,请尝试使用 SurfaceTexture,或者在其他情况下绘制到常规视图中。

SurfaceView 是一种特殊情况,它以一种针对性能进行优化的特殊方式来协调表面合成。如果为它进行了配置,您可以在视图层次结构中的 SurfaceView 顶部绘制内容,但不能将 SurfaceView 的内容与其后面的内容混合。

于 2012-09-23T19:51:03.790 回答