CardView设置任意角为圆角

news2024/10/7 18:20:17

注意:material:1.1.0以上版本在RadiusCardView节点下一定要添加 android:theme=“@style/Theme.MaterialComponents”,不然会报错,另外,由于是重写自MaterialCardView,所以一定要导入material包:

 implementation 'com.google.android.material:material:1.1.0'

样式:
在这里插入图片描述

源码:

RadiusCardView

import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
 
import com.google.android.material.card.MaterialCardView;
import com.seocoo.user.R;
 
public class RadiusCardView extends MaterialCardView {
    private float tlRadiu;
    private float trRadiu;
    private float brRadiu;
    private float blRadiu;
 
    public RadiusCardView(Context context) {
        this(context, null);
    }
 
    public RadiusCardView(Context context, AttributeSet attrs) {
        this(context, attrs, R.attr.materialCardViewStyle);
    }
 
    public RadiusCardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setRadius(0);
        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.RadiusCardView);
        tlRadiu = array.getDimension(R.styleable.RadiusCardView_rcv_topLeftRadiu, 0);
        trRadiu = array.getDimension(R.styleable.RadiusCardView_rcv_topRightRadiu, 0);
        brRadiu = array.getDimension(R.styleable.RadiusCardView_rcv_bottomRightRadiu, 0);
        blRadiu = array.getDimension(R.styleable.RadiusCardView_rcv_bottomLeftRadiu, 0);
        setBackground(new ColorDrawable());
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        Path path = new Path();
        RectF rectF = getRectF();
        float[] readius = {tlRadiu,tlRadiu,trRadiu,trRadiu,brRadiu,brRadiu,blRadiu,blRadiu};
        path.addRoundRect(rectF,readius,Path.Direction.CW);
        canvas.clipPath(path,Region.Op.INTERSECT);
        super.onDraw(canvas);
    }
 
    private RectF getRectF() {
        Rect rect = new Rect();
        getDrawingRect(rect);
        RectF rectF = new RectF(rect);
        return rectF;
    }
}

attr文件:

    <declare-styleable name="RadiusCardView">
        <!--        左上圆角大小-->
        <attr name="rcv_topLeftRadiu" format="dimension" />
        <!--        右上圆角大小-->
        <attr name="rcv_topRightRadiu" format="dimension" />
        <!--        右下圆角大小-->
        <attr name="rcv_bottomRightRadiu" format="dimension" />
        <!--        左下圆角大小-->
        <attr name="rcv_bottomLeftRadiu" format="dimension" />
    </declare-styleable>

使用案例:

    <RadiusCardView所在路径.RadiusCardView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:theme="@style/Theme.MaterialComponents" //这行一定要添加,不然会报错
        app:rcv_topLeftRadiu="20dp"
        app:rcv_topRightRadiu="40dp"
        app:rcv_bottomLeftRadiu="10dp"
        app:rcv_bottomRightRadiu="60dp">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <View
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="2"
                android:background="@color/color295C8E"/>
 
            <View
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:background="@color/color9E7900"/>
 
        </LinearLayout>
 
    </RadiusCardView所在路径.RadiusCardView>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1117231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年京东双11食品饮料品类数据回顾

2022年双11&#xff0c;根据京东官方发布的数据显示&#xff0c;京东百货中&#xff0c;京东新百货的589个品类10025个品牌成交额同比增长100%。而在食品饮料行业中&#xff0c;也有一些在大促期间成交额同比涨幅超过100%的品牌。 下面&#xff0c;结合鲸参谋平台提供的数据&am…

达梦mysql数据迁移出现datetime兼容问题

迁移工具无法连接mysql 这里需要指定驱动即可 数据迁移datetime数据无法导入 原因是时间中间带有T&#xff0c;达梦不支持这个格式的时间 解决办法也很简单&#xff0c;换最新的达梦驱动。 驱动安装文件里边就有&#xff0c;不用再去下载了。

【lesson13】进程地址空间收尾

文章目录 进程地址空间存在的原因原因一原因二原因三 重新理解什么是挂起&#xff1f; 进程地址空间存在的原因 原因一 凡是非法访问或者映射&#xff0c;OS都会识别到&#xff0c;并终止该进程。 例子&#xff1a; 我们会发现我们定义的字符串常量只有只读权限&#xff0c;…

Hadoop3教程(三十):(生产调优篇)纠删码

文章目录 &#xff08;155&#xff09;纠删码原理纠删码原理纠删码相关命令纠删码策略解释 &#xff08;156&#xff09;纠删码案例实操参考文献 &#xff08;155&#xff09;纠删码原理 纠删码原理 默认情况下&#xff0c;一个文件在HDFS里会保留3个副本&#xff0c;以此提高…

2023年【北京市安全员-A证】考试报名及北京市安全员-A证考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 北京市安全员-A证考试报名根据新北京市安全员-A证考试大纲要求&#xff0c;安全生产模拟考试一点通将北京市安全员-A证模拟考试试题进行汇编&#xff0c;组成一套北京市安全员-A证全真模拟考试试题&#xff0c;学员可…

【大揭秘】美团面试题:ConcurrentHashMap和Hashtable有什么区别?一文解析!

正文 亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;一个热爱技术分享的程序员&#xff0c;今天我为大家带来了一篇有关美团面试题的热门话题&#xff1a;ConcurrentHashMap 和 Hashtable 有什么区别。这个问题在Java面试中常常被拿来考察对多线程编程的理…

基于TCP的RPC服务

TCP服务器上的RPC&#xff0c;通过创建一个服务器进程监听传入的tcp连接&#xff0c;并允许用户 通过此TCP流执行RPC命令 -module(tr_server). -author("chen"). -behaviour(gen_server).%% API -export([start_link/1,start_link/0,get_count/0,stop/0 ]).-export(…

基于金豺优化的BP神经网络(分类应用) - 附代码

基于金豺优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于金豺优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.金豺优化BP神经网络3.1 BP神经网络参数设置3.2 金豺算法应用 4.测试结果&#xff1a;5.M…

TUI界面容器管理工具Oxker

什么是 Oxker &#xff1f; Oxker 是一个基于文本的用户界面&#xff0c;用于查看 Docker 容器的信息和统计数据。一目了然&#xff0c;Oxker 提供了容器列表、其当前状态、对系统资源&#xff08;CPU、内存&#xff09;的影响、容器 ID、镜像名称、大小等。该应用程序还提供用…

虚拟机weblogic服务搭建及访问(物理机 )

第一、安装环境&#xff1a; weblogic10.3.6.jar, jdk1.6.bin(开始安装jdk1.8后&#xff0c;安装域的时候报错 &#xff0c;版本很重要&#xff09; centos7虚拟机&#xff08;VMware9&#xff09; 本机系统windows7 以上安装包如果需要可以私信我&#xff0c;上传资源提示…

2023年【汽车驾驶员(高级)】考试试卷及汽车驾驶员(高级)理论考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 汽车驾驶员&#xff08;高级&#xff09;考试试卷根据新汽车驾驶员&#xff08;高级&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将汽车驾驶员&#xff08;高级&#xff09;模拟考试试题进行汇编&…

狂炒元宇宙,又赌AIGC!五年亏20亿,中文在线凭什么

大数据产业创新服务媒体 ——聚焦数据 改变商业 在网文巨头阅文集团发布阅文妙笔大模型之后三个月&#xff0c;搭上AIGC概念之后股价翻倍上涨的中文在线10月中旬正式发布中文逍遥大模型。网文行业的内卷&#xff0c;又在卷向大模型。 按照中文在线董事长童之磊的说法&#xff…

代码随想录算法训练营第二十八天丨 回溯算法part05

491.递增子序列 思路 这个递增子序列比较像是取有序的子集。而且本题也要求不能有相同的递增子序列。 在90.子集II (opens new window)中是通过排序&#xff0c;再加一个标记数组来达到去重的目的。 而本题求自增子序列&#xff0c;是不能对原数组进行排序的&#xff0c;排…

线性代数-Python-03:矩阵的变换 - 手写Matrix Transformation及numpy中的用法

文章目录 一、代码仓库二、旋转矩阵的推导及图形学中的矩阵变换2.1 让横坐标扩大a倍&#xff0c;纵坐标扩大b倍2.2 关于x轴翻转2.3 关于y轴翻转2.4 关于原点翻转&#xff08;x轴&#xff0c;y轴均翻转&#xff09;2.5 沿x方向错切2.6 沿y方向错切2.7 旋转2.8 单位矩阵2.9 矩阵的…

【UE5】引入C++插件Plugins不在UE里出现

原因 未编译过C 原项目为蓝图项目&#xff0c;或者虽然为C项目&#xff0c;但并为编译过C. 解决 创建一个C脚本&#xff0c;让编辑器重启重新编译一遍。 如还不行&#xff0c;则打开Plugins插件面板&#xff0c;创建一个空的新的插件&#xff0c;再让引擎自动重启重新编译…

QML中常见模型使用

目录 引言基础知识简单模型重复模型常见视图ListViewRepeater ListModelQbjectModel容器模型数组QStringListQList<XX *> QAbstractItemModelQSortFilterProxyModel 总结 引言 Qt Quick的基础组件中大量使用到模型&#xff0c;如ListView、Repeater等。视图所支持模型类…

YOLOv5算法改进(15)— 如何去更换Neck网络(包括代码+添加步骤+网络结构图)

前言:Hello大家好,我是小哥谈。在学习完了如何去更换主干网络之后,接着就让我们通过案例的方式去学习下如何去更换Neck网络。本篇文章的特色就是比较浅显易懂,附加了很多的网络结构图,通过结构图的形式向大家娓娓道来,希望大家学习之后能够有所收获!🌈 前期回顾: YO…

linux-(from_timer)-定时器的升级

查看linux版本&#xff1a;cat proc/version 使用旧主板型号&#xff08;SSD202D&#xff09;4.9.84 使用新主板型号&#xff08;RV1126&#xff09;4.19.111 移植yaffs驱动时发现内核对定时器进行了升级&#xff0c;很扯淡啊&#xff01; 多亲切多易懂啊&#xff01; 你看这…

2023年中国纸箱机械优点、市场规模及发展前景分析[图]

纸箱机械行业是指涉及纸箱生产和加工的机械设备制造、销售和相关服务的产业。这个行业的主要任务是设计、制造和提供用于生产各种类型和规格纸箱的机械设备&#xff0c;以满足包装行业对纸箱的不同需求。 纸箱机械行业优点 资料来源&#xff1a;共研产业咨询&#xff08;共研网…

Java-io(输入/输出)

文章目录 绪论输入流输出流File类文件输入 / 输出流字节输入输出流字符输入输出流 End 绪论 首先如果我们在Java编写的一个程序中获得了想要的某种结果&#xff0c;那么在程序结束后&#xff0c;这个结果还存在嘛&#xff1f;不存在的&#xff0c;因为在Java程序运行时&#x…