如何在android中创建圆角视频视图?

时间:2013-06-17 12:56:25

标签: android android-videoview rounded-corners

在我的应用程序中,我想将videoview显示为圆角。我尝试将videoview / surfaceview放置在linearlayout内,并将圆角设置为linearlayout。但它并不完美。我无法将圆角设置为videoview / surfaceview。我想将视图设置如下图: enter image description here

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

9 个答案:

答案 0 :(得分:2)

当解决方案非常简单时(只要您的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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是不可能的,但你可以通过在videoview上绘制一个imageview并设置一个透明的图像和角上的圆角形状的纯色来实现。 检查一下:Click here

答案 3 :(得分:0)

对我有用,

        <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>

答案 4 :(得分:0)

您可以使用FramLayout和XML drawable来实现

FramLayout

        <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 Drawable

<?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>

答案 5 :(得分:0)

很简单, 1.如@sunil kumar所述,创建带有圆角的图形 2.将可绘制对象设置为布局的背景 3.使用该布局时,请设置 layout(布局项目名称).clipToOutline = true

答案 6 :(得分:0)

这是圆形视频视图的 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无关。

祝您有美好的一天!

enter image description here

答案 7 :(得分:-3)

将rounded.xml放在drawable文件夹中,并设置在像android:background="@drawable/rounded.xml"

这样的视频的framelayout上
<?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>

答案 8 :(得分:-4)

在drawable文件夹中创建一个名为shape_video.xml的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>

根据您的rqmnt和视频视图的背景属性更改半径,输入

android:background="@drawable/shape_video"