2011-09-03 142 views
8

我有一個面板放在另一個視圖的頂部,通過一個相關佈局。Android透明畫布(surfaceview)

我想給這個面板一個透明的背景,但沒有找到正確的方法來做這個搜索幾個小時後。當我將alpha設置回0時,我會以黑色背景結束。

希望這裏有人能幫助我。

非常感謝!

面板通過這個代碼得出:

import android.content.Context; 
    import android.graphics.Canvas; 
    import android.graphics.Paint; 
    import android.util.AttributeSet; 
    import android.view.SurfaceHolder; 
    import android.view.SurfaceView; 

    public class Panel extends SurfaceView implements SurfaceHolder.Callback { 

    private ViewThread mThread; 

    Paint paint = new Paint(); 

    public Panel(Context context, AttributeSet attributeSet) { 
     super(context, attributeSet); 
     getHolder().addCallback(this); 
     mThread = new ViewThread(this); 
    } 

    public void doDraw(Canvas canvas) { 
     canvas.drawARGB(50, 120, 120, 120); 

     paint.setARGB(255, 255, 0, 0); 
     paint.setStrokeWidth(2); 

     int CanvasHeight = canvas.getHeight(); 
     int CanvasWidth = canvas.getWidth(); 

     canvas.drawLine(LeftStartX, LeftStartY, StopX, StopY, paint); 
    } 

    public void updateDrawing(float LB, float RB, float BD, float AH, float AD){ 
     Left = LB; 
     Right = RB; 
     Distance = BD; 
     AHeight = AH; 
     ADistance = AD; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} 


    public void surfaceCreated(SurfaceHolder holder) { 
     if (!mThread.isAlive()) { 
      mThread = new ViewThread(this); 
      mThread.setRunning(true); 
      mThread.start(); 
     } 
    } 


    public void surfaceDestroyed(SurfaceHolder holder) { 
     if (mThread.isAlive()) { 
      mThread.setRunning(false); 
     } 
    } 
} 

回答

2

與關鍵字surfaceview代替帆布II發現,這是不可能的搜索後。欲瞭解更多信息,請參閱:how to make surfaceview transparent

由於畫布的背景是靜態的,我給了它完全相同的背景。現在,它看起來是透明的:)

Bitmap bg = BitmapFactory.decodeResource(getResources(), R.drawable.background_panel_800_480); 
    canvas.drawBitmap(bg, 0, 0, null); 
3

試試這個:

getHolder().setFormat(PixelFormat.TRANSLUCENT); 
+0

謝謝您的回答,但不幸的是這並沒有解決問題。我把這行放在'getHolder()。addCallback(this)'的上面和下面,'但是背景保持黑色。 – patrick

+0

uhmmm ..如何刪除背景'setBackgroundResource(0)'或xml'android:background =「@ null」' –

+0

Ferdy,感謝您的新建議,但不幸的是,這也沒有解決問題。這也顯示了黑色背景。 – patrick

4

我複製了同樣的問題解決方案:how to make surfaceview transparent,得到它與你類似的設置工作。

對我來說關鍵的一點是'setZOrderOnTop(true)'設置,我在第一遍中愚蠢地忽略了這一點。我把它放在構造函數中,並將我的像素格式設置爲surfaceCreated內的RGBA_8888。

此時,頂層佈局的背景可見。

+0

setZOrderOnTop(true)是這裏難題的一部分,它完全不直觀。 –

26

在構造函數中:

setZOrderOnTop(true); 

holder.addCallback(this)

holder.setFormat(PixelFormat.TRANSPARENT); 

在拉制開始:

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

這有幫助。謝謝! –

+0

哦,這就是答案! 如果第一次調用使背景透明,最後一行還允許您繪製帶有alpha級別的位圖 – Giudark

+0

謝謝,它的確有個竅門,雖然有點太過分:'setZOrderOnTop'使它出現在窗口的最頂端。所以現在SurfaceView出現在它的背景之上(這對於透明度來說是完美的),但是當我拖動我的導航抽屜時,SurfaceView也處於頂部(而不是下面),這看起來很糟糕。任何想法? –