2012-09-23 179 views
2

我想在ImageView上放置一個透明的SurfaceView。我在SurfaceView子類構造函數如下Android透明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)); 
+0

請發佈一個[SSCCE](http://www.sscce.org),它可以重現您的問題。 –

回答

1

SurfaceViews不能是透明的。如果您使用API​​ 11或更高版本,請嘗試使用SurfaceTexture,或者在其他情況下使用常規View。

SurfaceView是一種特殊的情況,它以一種特殊的方式來協調曲面合成,以優化性能。如果配置了視圖層次結構,則可以在視圖層次結構中的SurfaceView上繪製內容,但不能將SurfaceView的內容與其後面的內容混合。

+0

首先,感謝您的回覆。從這個問題:http://stackoverflow.com/questions/5391089/how-to-make-surfaceview-transparent我認爲這是可能的。你有沒有一個如何使用簡單視圖來模仿SurfaceView功能的例子? – user1692811

+0

你究竟想要做什麼?爲什麼在ImageView的頂部有一個SurfaceView?什麼是用例? – adamp

+0

我想在圖像上繪製一些形狀。我將代碼更改爲子類View,並在之後使用invalidate()強制繪製。似乎工作正常。再次感謝。 – user1692811

2

我知道,這篇文章已經有一年了,但是你將顏色設置爲0,代表黑色。使用

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

使其透明。

+0

如果它是一個視圖,這將起作用,但正如@adamp所述,SurfaceView涉及到一種完全不同的做事方法。簡單地將背景設置爲透明將不起作用。你可以做的是'surfaceView.setZOrderOnTop(true)',這將允許SurfaceView背後的東西顯示。這可能會產生其他問題,但是,如果您有導航抽屜; SurfaceView也將位於抽屜的頂部。 –