CardView实现SurfaceView圆角

部署运行你感兴趣的模型镜像

我们使用CardView作为容器,利用其cardCornerRadius属性设置圆形效果,内部放置SurfaceView。同时,为了确保SurfaceView也被正确裁剪为圆形,我们还需要使用ViewOutlineProvider进行硬件加速的圆形裁剪

  1. XML布局配置

    <androidx.cardview.widget.CardView
        android:id="@+id/circularCard"
        android:layout_width="200dp"
        android:layout_height="200dp"
        app:cardCornerRadius="100dp"       <!-- 半径=宽度/高度的一半 -->
        app:cardPreventCornerOverlap="false" <!-- 禁用边角重叠保护 -->
        app:cardElevation="0dp"             <!-- 禁用阴影保证圆形完美度 -->
        app:cardBackgroundColor="@android:color/transparent"> <!-- 透明背景 -->
    
        <SurfaceView
            android:id="@+id/surfaceView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </androidx.cardview.widget.CardView>
    
    
  2. 代码动态适配

    // 在Activity/Fragment中
    CardView cardView = findViewById(R.id.circularCard);
    SurfaceView surfaceView = findViewById(R.id.surfaceView);
    
    // 添加布局监听确保正确尺寸
    cardView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
        int diameter = Math.min(cardView.getWidth(), cardView.getHeight());
        
        // 动态设置圆角半径
        cardView.setRadius(diameter / 2f);
        
        // API 21+ 设备启用硬件裁剪(高性能)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            surfaceView.setOutlineProvider(new ViewOutlineProvider() {
                @Override
                public void getOutline(View view, Outline outline) {
                    outline.setRoundRect(0, 0, diameter, diameter, diameter / 2f);
                }
            });
            surfaceView.setClipToOutline(true);
        }
    });
    
    
  3. 圆角控制

    • 作用:定义卡片四个角的弯曲弧度(单位:dp),值越大圆角越明显。
    • 圆形效果:当半径设为宽度/高度一半时(cardCornerRadius=“100dp”),卡片呈现正圆形

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝加点糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值