设置表面视图的背景颜色

问题描述:

我想将表面视图的背景颜色设置为我的相机表面视图。设置表面视图的背景颜色

我使用this来实现它。但是这个例子并不完整。任何人都可以请帮助我一些其他有用的链接。

感谢

使用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

使用此

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

我已经尝试了上述,但它并没有帮助我 – 2013-03-08 04:18:53

你必须做一个小黑客,各地要在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背景。

有一种解决方法可以做到这一点。

  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

只是用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