2012-09-02 115 views
1

我有一个包含两个SurfaceViews的FrameLayout。其中一个将显示相机预览,另一个是我用于绘制的自定义表面视图。问题是表面视图不显示。如果我注释掉相机开始预览的那一行,它会在黑色背景上显示。这表明表面视图定位良好,但我怀疑当相机预览画出时,出现了问题。预览时不显示Android SurfaceView覆盖相机视图

摄像机视图:

public CameraView(Context context, AttributeSet a) { 
    super(context, a); 
    mHolder = getHolder(); 
    mHolder.addCallback(this); 
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 

该自定义视图:

public InclinaisonGauge(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    getHolder().addCallback(this); 
    getHolder().setFormat(PixelFormat.TRANSLUCENT); 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    run = true; 
    updateThread = new Thread() 
    { 
     public void run() 
     { 
      Canvas c = null; 
      final SurfaceHolder inclHolder = getHolder(); 
      while (run) { 
       try { 
        c = inclHolder.lockCanvas(); 
        if(c!=null) 
        { 
         synchronized (inclHolder) { 
          onDraw(c); 
         } 
        } 
       } finally { 
       // do this in a finally so that if an exception is thrown 
       // during the above, we don't leave the Surface in an 
       // inconsistent state 
       if (c != null) { 
        inclHolder.unlockCanvasAndPost(c); 
       } 
      }   
     } 
    } 
}; 

而且我用这个非常简单的画法上的自定义视图,以确保它不是一个帧率问题

public void doDraw(final Canvas canvas, final boolean bigSize, float daDirection) 
{ 
    canvas.drawARGB(255, 255, 255, 255); 
} 

有没有人遇到过这个?

感谢

+0

这是一个简单的项目,显示了这个问题 - http://dl.free.fr/f4rt18a1o。启动它,你只会看到相机。在CameraView中,注释掉它开始预览的那一行,你会看到正在绘制的SurfaceView。 – tishu

回答

5

好吧,如果任何人得到这一点,解决方法是调用这个就surfaceView

this.setZOrderMediaOverlay(true); 
+0

不适合我...! –

1

我不认为SurfaceViews旨在用作覆盖,但它是可能实现这种行为。你需要做的是当SurfaceView类被创建时:

setZOrderMediaOverlay(true); 
    getHolder().setFormat(PixelFormat.TRANSPARENT); 
+0

这是我的解决方案。 setZOrderMediaOverlay是不够的。我相信这应该是被接受的答案 – yerlilbilgin

相关问题