为了账号安全,请及时绑定邮箱和手机立即绑定

CardView 上的自适应半径

CardView 上的自适应半径

守着一只汪 2022-05-20 18:40:54
我有一个问题,我希望你能给我一些信息。为了有一个圆形 VideoView ,我把它放在 CardView<android.support.v7.widget.CardView                     android:layout_width="match_parent"                     android:layout_height="match_parent"                     android:id="@+id/cardVideo"                     app:cardCornerRadius="180dp"                     android:background="#000">                     <com.twilio.video.VideoView                         android:id="@+id/videoView"                         android:layout_width="match_parent"                         android:layout_height="match_parent"                         android:visibility="visible" />                 </android.support.v7.widget.CardView>但问题是我在多个平板电脑上构建我的应用程序,而 cardCornerRadius 不适合屏幕尺寸,180dp 对于 8 英寸平板电脑来说太大了,所以我的 VideoView 出现在 DIAMONDS 中,请参阅:例如在 10 英寸平板电脑中,它是一个完美的圆圈:我试图以编程方式获取设备英寸并使用 setRadius() 依赖它,但它并不完美,我认为这不是正确的方法。我该怎么做才能找到适合平板电脑的良好拐角半径?谢谢
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

好的,我找到了你的答案:


在您的项目中添加此类


package com.example.myapplication;


import android.content.Context;

import android.graphics.*;

import android.util.AttributeSet;

import android.widget.FrameLayout;


public class RoundedCornerLayout extends FrameLayout {


    private Path path = new Path();


    public RoundedCornerLayout(Context context) {

        super(context);

    }


    public RoundedCornerLayout(Context context, AttributeSet attrs) {

        super(context, attrs);

    }


    public RoundedCornerLayout(Context context, AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

    }


    @Override

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {

        super.onSizeChanged(w, h, oldw, oldh);


        // compute the path

        float halfWidth = w / 2f;

        float halfHeight = h / 2f;

        float centerX = halfWidth;

        float centerY = halfHeight;

        path.reset();

        path.addCircle(centerX, centerY, Math.min(halfWidth, halfHeight), Path.Direction.CW);

        path.close();


    }


    @Override

    protected void dispatchDraw(Canvas canvas) {

        int save = canvas.save();

        canvas.clipPath(path);

        super.dispatchDraw(canvas);

        canvas.restoreToCount(save);

    }

}

并把你的VideoView里面。像这儿 :


<com.example.myapplication.RoundedCornerLayout

        android:layout_width="100dp"

        android:layout_height="100dp">


    // place your VideoView 

    <ImageView

            android:layout_width="match_parent"

            android:src="@color/colorPrimary"

            android:layout_height="match_parent"/>


</com.example.myapplication.RoundedCornerLayout>

//img1.sycdn.imooc.com//6287706e0001e2c605430275.jpg

查看完整回答
反对 回复 2022-05-20
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信