我应该如何覆盖 VideoView 的 onDraw 以使其具有透明的圆角?

Posted

技术标签:

【中文标题】我应该如何覆盖 VideoView 的 onDraw 以使其具有透明的圆角?【英文标题】:How should I override VideoView's onDraw in order for it to have transparent rounded corners? 【发布时间】:2014-04-25 18:38:17 【问题描述】:

在 VideoView 的情况下,显然使用背景形状不起作用 此外,还有很多文章如何为 ImageView 覆盖 onDraw 并使其角变圆。

但是对于 VideoView,我该怎么做呢?

【问题讨论】:

【参考方案1】:

根据文档,不能使用VideoView 或任何SurfaceView 完成透明圆角:

表面是 Z 顺序的,因此它位于持有其 SurfaceView 的窗口后面; SurfaceView 在它的窗口上打了一个洞来显示它的表面。

使用TextureView 在理论上似乎是可行的,因为它应该表现得像普通视图。但是我也做不到:尝试了 TextureView 图层绘制和父 FrameLayout 前景中的 ShapeDrawable 的 Porter Duff 模式。

使用VideoView,您可以做的是制作纯色的角。使用具有透明内容的 9-patch 和纯色的角,并设置在顶部绘制的 ImageView 上。

编辑:检查this示例项目。

【讨论】:

所以有可能吗? (参考你说的最后一段) @J.Kowalski 是的,有可能。检查我刚刚添加到答案中的示例项目。 这可以使用 TextureView,例如使用 CardView(见我的回答) 试试这个示例github.com/developer-anees/android-round-camera2video-preview【参考方案2】:

我认为没有简单的方法可以做到这一点。例如,你可以试试这个:

在 ImageView 窗口下放置一个视频窗口 使用具有透明形状的纯色 PNG 填充 ImageView 使用 FrameLayout 或 RelativeLayout 来保存两个视图,因为它们允许视图轻松地相互重叠

【讨论】:

【参考方案3】:

您可以通过将 TextureView 放入 CardView(来自支持库)轻松实现此效果。

然后您可以在 CardView 上设置圆角半径和阴影:

<androidx.cardview.widget.CardView
    android:layout_
    android:layout_
    app:cardCornerRadius="12dp">

    <TextureView
        android:id="@+id/video"
        android:layout_
        android:layout_ />

</androidx.cardview.widget.CardView>

【讨论】:

谢谢。为我工作。

以上是关于我应该如何覆盖 VideoView 的 onDraw 以使其具有透明的圆角?的主要内容,如果未能解决你的问题,请参考以下文章

基于父宽度的动态 VideoView 高度

如何在 Android Studio 中将一个 VideoView 放在另一个 VideoView 下方?

Videoview 在框架布局内没有全屏显示

以纵向模式在videoview中全屏制作视频[重复]

调整 VideoView 的大小

如何刷新活动