如何在SurfaceView顶部使自定义叠加视图透明?

时间:2011-10-10 15:06:26

标签: android

好的,我在SO和网络上经历了很多类似的问题,但无济于事。 我只是试图在SurfaceView顶部覆盖透明视图..并最终在其上绘制一个矩形,使其看起来覆盖相机预览。

我无法让自定义视图变得透明,它会阻挡底层相机预览。有什么建议吗?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <FrameLayout 
        android:layout_alignParentTop="true"
        android:layout_width="fill_parent"
        android:layout_height="400dip">
        <SurfaceView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
            android:id="@+id/drawSurface"  />
        <com.bobby.facecapture.FaceOverlayView
            android:id="@+id/drawOverlay"
            android:background="@android:color/transparent" 
            android:layout_width="200dip"     
            android:layout_height="200dip"    
        />
    </FrameLayout>
</RelativeLayout>

200x200只是暂时的,以证明它确实覆盖了另一种观点。

FaceOverlayView只是一个自定义视图 - 直接从View派生,而不会覆盖任何内容(暂时)。

我在相机预览的顶部有一个黑色矩形

4 个答案:

答案 0 :(得分:2)

嗯,this resource file是条码扫描器捕获布局,它在摄像头预览的顶部有一个“取景器”。他们使用自己的@color/transparent资源,定义为<color name="transparent">#00000000</color>。也许用他们的代码来解决,并试图弄清楚你和他们的不同之处。

答案 1 :(得分:0)

您是否尝试将src或背景设置为@null?

此外,如果此途径无效,您可以考虑使用路径绘制到曲面上,这样您就可以在运行时动态更改矩形的大小/位置。

但是,这需要为SurfaceView编写一些代码并处理onDraw,这可能对你正在做的事情有些过分。从本质上讲,这意味着让你的自定义类在这里成为SurfaceView的扩展,而不是在一个上层叠的东西。

答案 2 :(得分:0)

我一直在做同样的事情,在相机预览上有自定义视图叠加。最初视图是不透明的,因此相机预览被阻止。问题是我试图将图像绘制到画布但指定图像为RGB_565,将其更改为ARGB_8888工作正常。您必须拥有Alpha通道,并确保自定义视图的背景设置为透明。

答案 3 :(得分:0)

我将alpha通道设置为0.它就像一个魅力。

我在添加自定义视图运行时后执行此操作。

(ImageView) myCustomView.setAlpha(0)