如何重写VideoView的onDraw方法,使其具有透明圆角?

4

在使用VideoView时,显然不能使用背景形状。 此外,有很多文章介绍如何覆盖ImageView的onDraw方法并使其边角变成圆形。

但是我该如何为VideoView实现相同的效果呢?

3个回答

8

根据文档,使用VideoView或任何SurfaceView都无法实现透明圆角:

表面被Z排序,因此它在持有其SurfaceView的窗口后面;SurfaceView在其窗口中打孔,以允许显示其表面。

使用TextureView理论上似乎是可能的,因为它应该像普通视图一样运行。然而,我无法做到:尝试了TextureView层绘制和父FrameLayout前景中的ShapeDrawable的Porter Duff模式。

使用VideoView,您可以使固定颜色的圆角。使用带有透明内容和仅颜色固定的角落的9-patch,并将其设置在顶部绘制的ImageView上。

编辑:请查看此示例项目

screenshot


所以这是可能的吗?(指你所说的最后一段话) - Kaloyan Roussev
@J.Kowalski 是的,这是可能的。请查看我刚刚添加到答案中的示例项目。 - sergio91pt
这是可能的,使用TextureView,例如通过使用CardView(请参见我的答案) - aberaud
尝试这个示例 https://github.com/developer-anees/android-round-camera2video-preview - Saku

1

您可以通过在支持库中使用CardView将TextureView放入其中,轻松实现此效果。

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

<androidx.cardview.widget.CardView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:cardCornerRadius="12dp">

    <TextureView
        android:id="@+id/video"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</androidx.cardview.widget.CardView>

0

我认为没有简单的方法来实现这个。例如,您可以尝试以下方法:

  • 在 ImageView 窗口下方放置一个视频窗口
  • 使用填充有透明形状的纯色 PNG 图像来填充 ImageView
  • 使用 FrameLayout 或 RelativeLayout 来容纳两个视图,因为它们可以轻松地重叠在一起

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接