我应该如何覆盖 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 以使其具有透明的圆角?的主要内容,如果未能解决你的问题,请参考以下文章