2013-03-07 77 views

回答

2

使用surfaceview_obj.setBackgroundColor(INT顏色)來設置背景顏色..

設置白色作爲背景使用此代碼

surfaceview_obj.setBackgroundColor(0Xffffffff); 

check this

+0

Hi @Swarnedu。你的答案是正確的,但它會使表面視圖不透明,我只是想設置一個透明的背景顏色 – 2013-03-07 17:18:37

+1

我不確定,只是試一試這個顏色代碼0X00ffffff – 2013-03-07 17:22:13

+0

我已經檢查過。它總是使不透明的表面視圖 – 2013-03-07 17:26:16

1

使用此

surfaceview.getHolder().setFormat(PixelFormat.TRANSLUCENT); 
+2

我已經嘗試了上述,但它並沒有幫助我 – 2013-03-08 04:18:53

1

你必須做一個小黑客,各地要在SurfaceView任何背景的工作,如:

覆蓋的setBackgroundsetBackgroundDrawable方法

Drawable background 

    @Override 
    public void setBackgroundDrawable(Drawable background) { 
     this.background = background; 
    } 

    @Override 
    public void setBackground(Drawable background) { 
     this.background = background; 
    } 

不要忘記調用setBounds上繪製

@Override 
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
     super.onLayout(changed, left, top, right, bottom); 
     matrix = null; 
     if (background != null) 
     background.setBounds(left, top, right, bottom); 
    } 

然後在你鎖定,繪畫,解鎖並張貼在畫布上的代碼添加背景

Canvas c = holder.lockCanvas(); 
    if (background != null) 
     background.draw(c); 

    // do your stuff here 

    holder.unlockCanvasAndPost(c); 

適用於XML和Java背景。

18

有一種解決方法可以做到這一點。

  1. 爲surfaceview添加父視圖組,將背景色設置爲該視圖組而不是surfaceview;

    <FrameLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:background="@android:color/holo_blue_dark"> 
    
        <com.example.surfacetest.MySurface 
         android:id="@+id/surface" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" /> 
    
    </FrameLayout> 
    
  2. 爲SurfaceView實例添加以下內容;

    surfaceView.setZOrderOnTop(true); 
    surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 
    

現在你得到你想要的背景顏色和surfaceview是tanslucent。

+0

這應該被標記爲正確的答案。它像一個魅力。 – andreimarinescu 2016-01-05 08:04:53

+2

@wrkwrk:這可以工作,但是這樣做我不能覆蓋SurfaceView的任何視圖頂部。除了setXOrderOnTop(true)之外,我們還有其他選擇嗎? – 2016-05-13 09:01:36

+0

完美!你從輕微的頭痛中拯救了我! – 2017-03-21 19:13:53

2

只是用canvas.drawRect()繪製一個Rect對象。將座標設置爲0,0,screenX,screenY

+0

歡迎來到Stack Overflow!請詳細說明你的問題(增加例子和更深入的解釋)。 – manniL 2016-04-24 12:48:03

+1

儘管這不直接回答問題(原始海報想要讓他的表面看起來半透明,底下有白色背景)。對於那些只想使其表面視圖變白的用戶,另一種選擇是使用: canvas.drawRGB(255,255,255); – Chris 2017-02-08 16:50:46