Android透明SurfaceView清除为黑色

时间:2012-09-23 19:18:04

标签: android canvas transparency

我想在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));

2 个答案:

答案 0 :(得分:2)

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

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

使其透明。

答案 1 :(得分:1)

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

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