Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启用预览时,相机视图上的Android SurfaceView覆盖不显示_Java_Android_Camera_Overlay_Surfaceview - Fatal编程技术网

Java 启用预览时,相机视图上的Android SurfaceView覆盖不显示

Java 启用预览时,相机视图上的Android SurfaceView覆盖不显示,java,android,camera,overlay,surfaceview,Java,Android,Camera,Overlay,Surfaceview,我有一个包含两个SurfaceView的框架布局。其中一个将显示相机预览,另一个是我用于绘图的自定义曲面视图。问题是曲面视图没有显示。如果我注释掉相机开始预览的那一行,它会在黑色背景上进行注释。这表明曲面视图定位良好,但我怀疑当摄影机预览绘制时,会出现问题 摄影机视图: public CameraView(Context context, AttributeSet a) { super(context, a); mHolder = getHolder(); mHolder

我有一个包含两个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);
}
有人经历过吗


谢谢

好的,如果有人收到这个,解决办法是在surfaceView上调用它

this.setZOrderMediaOverlay(true);

我不认为SurfaceView打算用作覆盖,但可以实现这种行为。您必须在创建SurfaceView类时执行以下操作:

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

下面是一个简单的项目,展示了这个问题-。启动它,你将只看到相机。在CameraView中,注释掉它开始预览的那条线,你就会看到正在绘制的SurfaceView。这是我的解决方案。SetzordermeDiagoverlay不够。我相信这应该是公认的答案