3

在我的应用程序中,我想将 videoview 显示为圆角。我尝试将 videoview/surfaceview 放在线性布局内,圆角设置为线性布局。但它并不完美。我无法将圆角设置为 videoview/surfaceview。我想将视图设置为下图: 在此处输入图像描述

任何人都知道如何做到这一点?

4

9 回答 9

5

当解决方案非常简单时(只要您的 min sdk > 21),不确定为什么会有这么多不好的答案。创建一个形状并将其放在视频上方是行不通的,因为您显然希望背景透明以查看其背后的视图。

我在这里找到了答案Android View Clipping。您只需将视频视图放在框架布局中,为框架布局添加圆形背景,添加轮廓提供程序并将框架布局剪辑到轮廓。

背景rounded_video_background

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#000000"/>
    <corners android:radius="16dp" />

</shape>

其中的框架布局和视频视图:

<FrameLayout
        android:id="@+id/video_view_container"
        android:layout_width="90dp"
        android:layout_height="120dp"
        android:background="@drawable/rounded_video_background"
        android:outlineProvider="background">

        <VideoView
            android:id="@+id/video_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            />

    </FrameLayout>

最后一步是裁剪到轮廓(没有看到在 xml 中执行此操作的方法,所以我以编程方式进行了操作): video_view_container.clipToOutline = true

于 2020-04-20T01:42:07.647 回答
3

它对我有用,

        <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        card_view:cardCornerRadius="25dp"
        android:layout_height="wrap_content">
    <VideoView
        android:id="@+id/video"
        android:layout_width="match_parent"
        android:layout_height="215dp" />
    </android.support.v7.widget.CardView>
于 2018-08-10T23:34:39.747 回答
1

您可以使用 FramLayout 和 XML drawable

框架布局

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <VideoView
                android:layout_width="match_parent"
                android:layout_height="@dimen/dp_240"
                android:layout_margin="@dimen/dp_24"/>

            <View
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/rounded_corner_video_bg" />
        </FrameLayout>

XML 可绘制

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="@dimen/dp_24"
        android:color="@color/md_white_1000" />
    <corners android:radius="@dimen/dp_24" />
</shape>
于 2019-04-02T19:15:02.000 回答
0

您可以尝试将不同的视图层叠在一起,以创建您正在寻找的圆角。尝试在每个角的 VideoView 上放置四个 ImageView,以实现所需的圆角。我已经成功使用 RelativeLayout 来完成此操作,但您也可以尝试使用 FrameLayout 将视图保持在一起。

于 2014-06-19T22:19:31.907 回答
0

这直接是不可能的,但是您可以通过在 videoview 顶部绘制一个 imageview 并设置一个图像,该图像具有透明的中间和角上的圆形纯色。检查这个:点击这里

于 2015-10-09T12:57:38.847 回答
0

这是圆形 VideoView的 XML 代码。

<androidx.cardview.widget.CardView
            android:id="@+id/videoCard"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="16dp"
            android:layout_marginBottom="16dp"
            app:cardCornerRadius="20dp"
            card_view:cardBackgroundColor="@color/white">

            <VideoView
                android:id="@+id/relativeVideo"
                android:layout_width="match_parent"
                android:layout_height="225dp"
                android:paddingTop="-10dp"
                android:paddingBottom="-10dp" />
        </androidx.cardview.widget.CardView>

负填充很重要,否则 VideoView 的高度在顶部和底部都小于 cardview 的一半cornerRadius。您可以根据需要设置任何高度,但负填充应始终为cardCornerRadius的一半。图中紫色为视频预览,与xml无关。

祝你今天过得愉快!

在此处输入图像描述

于 2021-04-16T19:46:14.780 回答
0

它很简单,1.创建一个圆角的drawable,如@sunil kumar 2.将该drawable设置为您的布局作为背景3.使用该布局时设置layout(您的布局项目名称).clipToOutline = true

于 2020-05-11T11:30:30.883 回答
-3

Create an xml file in drawable folder called shape_video.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
       <corners android:radius="6dp" />
 </shape>

Change the radius according to your rqmnt and in the background attribute of your videoview, give

android:background="@drawable/shape_video"
于 2013-06-17T13:00:30.973 回答
-3

将rounded.xml放在您的drawable文件夹中并设置在视频的framelayout上android:background="@drawable/rounded.xml"

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">

    <solid android:color="#FFFFFFFF" />
    <corners android:radius="7dp" />

</shape>
于 2013-06-17T13:02:53.167 回答