【问题标题】:How to Make a Custom Overlay View Transparent on top of a SurfaceView?如何在 SurfaceView 上使自定义叠加视图透明?
【发布时间】:2018-05-22 19:09:17
【问题描述】:

好的,我已经在 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 派生,没有覆盖任何东西(目前)。

我在相机预览顶部看到一个黑色矩形

【问题讨论】:

  • 我们在我们的一个应用程序中使用了非常相似的设置,它似乎工作正常 - 尝试在您的自定义视图中覆盖 onDraw 方法,并且在其中完全不做任何事情(不要调用 @987654323 @),这有什么改善吗?
  • 感谢您的建议,但不,我仍然只是在顶部看到黑色视图。我尝试在构造函数和 XML 声明中将背景颜色设置为透明。现在在派生视图中除了构造函数和空的 onDraw 什么都没有。
  • 这可能看起来有点矫枉过正,但也许将透明图片设置为背景会起作用?
  • 同样的结果——我什至尝试在顶部添加一个带有透明 png 的普通 ImageView——但它仍然使所有内容都变黑。

标签: android


【解决方案1】:

嗯,this resource file 是条码扫描仪捕获布局,它在相机预览的顶部有一个“取景器”。他们使用自己的@color/transparent 资源,定义为&lt;color name="transparent"&gt;#00000000&lt;/color&gt;。或许可以翻阅他们的代码并尝试找出您和他们的不同之处。

【讨论】:

    【解决方案2】:

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

    此外,如果这条途径不可行,您可以考虑使用路径在表面上绘制,这将允许您在运行时动态更改矩形的大小/位置。

    但是,这需要为 SurfaceView 编写一些代码并处理 onDraw,这对于您正在做的事情来说可能是多余的。从本质上讲,这意味着将您的自定义类作为 SurfaceView 的扩展,而不是在一个之上分层。

    【讨论】:

    • 嗯,我将尝试 null 方法 - 我尝试重新设计它以使用从 SurfaceView 派生的单个视图 - 将两者合二为一(在派生的 SurfaceView 中覆盖 onDraw 以绘制叠加层,使用相同的 Paint-rectangle 技术),但是不管你信不信,我得到了相同的结果。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      (ImageView) myCustomView.setAlpha(0)
      

      【讨论】:

        猜你喜欢
        • 2014-11-16
        • 2011-10-05
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 2011-07-20
        • 1970-01-01
        • 2015-12-25
        • 1970-01-01
        相关资源
        最近更新 更多