一、前言:

通常,要想使布局文件以圆角方式显示,最简便的方式是通过CardView进行包装。但是CardView设置圆角后四个角都是同样的弧度,有时候我们接到的需求是指给其中某些角指定圆角,或者给每个角指定不同的弧度,CardView就无法满足了。

以下代码便可实现该功能,给任意角指定任意弧度:

1、自定义FrameLayout

/**

* corner FrameLayout.you can control radius of every corner.

*

* @author gongshoudao

*/

public class CornerFrameLayout extends FrameLayout {

private final float[] mRadii = new float[8];

private final Path mPath = new Path();

public CornerFrameLayout(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

if (!mPath.isEmpty()) {

canvas.clipPath(mPath);

}

}

@Override

protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {

super.onSizeChanged(width, height, oldWidth, oldHeight);

mPath.reset();

mPath.addRoundRect(new RectF(0, 0, width, height), mRadii, Path.Direction.CW);

}

/**

* set each corner radius.

*

* @param topLeft top left corner radius.

* @param topRight top right corner radius.

* @param bottomRight bottom right radius.

* @param bottomLeft bottom right radius.

*/

public void setRadius(float topLeft, float topRight, float bottomRight, float bottomLeft) {

mRadii[0] = topLeft;

mRadii[1] = topLeft;

mRadii[2] = topRight;

mRadii[3] = topRight;

mRadii[4] = bottomRight;

mRadii[5] = bottomRight;

mRadii[6] = bottomLeft;

mRadii[7] = bottomLeft;

invalidate();

}

/**

* set each corner radius.

*

* @param topLeftX top left X

* @param topLeftY top left y

* @param topRightX top right x

* @param topRightY top right y

* @param bottomRightX bottom right x

* @param bottomRightY bottom right y

* @param bottomLeftX bottom left x

* @param bottomLeftY bottom left y

*/

public void setRadius(float topLeftX, float topLeftY, float topRightX, float topRightY,float bottomRightX, float bottomRightY, float bottomLeftX, float bottomLeftY) {

mRadii[0] = topLeftX;

mRadii[1] = topLeftY;

mRadii[2] = topRightX;

mRadii[3] = topRightY;

mRadii[4] = bottomRightX;

mRadii[5] = bottomRightY;

mRadii[6] = bottomLeftX;

mRadii[7] = bottomLeftY;

invalidate();

}

}

2、使用:

android:id="@+id/h5_game_corner_container"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/transparent"

android:clipChildren="true">

android定义圆角layout,Android布局切圆角相关推荐

  1. android程序日历layout,Android使用GridLayout绘制自定义日历控件

    效果图 思路:就是先设置Gridlayout的行列数,然后往里面放置一定数目的自定义日历按钮控件,最后实现日历逻辑就可以了. 步骤: 第一步:自定义日历控件(初步) 第二步:实现自定义单个日期按钮控件 ...

  2. android 加载layout,Android自定义View加载视图之LoadingLayout

    介绍 上一篇博文写了一个通用的加载view,这篇在加载view的基础在包裹一层就是LoadingLayout了,主要的目的是免去每次加载时要隐藏主内容布局,然后加载成功之后显示主内容布局这些繁琐操作. ...

  3. android 定义集合长度,Android Dex文件结构解析

    Java源文件通过Java编译器生成CLASS文件,再通过dx工具转换为classes.dex文件. DEX文件从整体上来看是一个索引的结构,类名.方法名.字段名等信息都存储在常量池中,这样能够充分减 ...

  4. android 定义固定数组,Android 图片数组定义和读取

    位置:packages/apps/Launcher2 1.图片数组定义.资源读取 如果有多张图片,这些图片的使用与顺序无关,可以采取这种方式. drawable-nodpi中有3张图片,wallpap ...

  5. android定义颜色数组,android – 我如何保存在array.xml中的颜色,并让它回到Color []数组...

    定义颜色资源,然后将它们添加到阵列以进行访问. #FF007F #FF0000 #FF7F00 #FFFF00 #7FFF00 #00FF00 #00FF7F #00FFFF #007FFF #000 ...

  6. android 定义数组常量,android 设置屏幕常亮

    类似设置禁止截屏和保持屏幕常亮这种依赖生命周期方法的代码,如果需要应用到多个 Activity 的话,可以将其放在 BaseActivity 基类中,避免编写重复性代码.或者还可以借助这个神奇的 Ac ...

  7. android创建布局文件,android学习——Android Studio下创建menu布局文件

    一.问题: android studio项目中没有看到menu文件夹: 在android studio项目中想要添加menu布局文件,一开始我的做法是:直接在res文件夹右键选择xml文件来添加,如下 ...

  8. android+底部评论框,Android 之BottomsheetDialogFragment仿抖音评论底部弹出对话框效果(实例代码)...

    实现的效果图: 自定义Fragment继承BottomSheetDialogFragment 重写它的三个方法: onCreateDialog() onCreateView() onStart() 他 ...

  9. android view使用方法,Android View构造方法第三参数使用方法详解

    我们都知道,在Android中要使用一个View,一般会有两种方式: 在XML文件中配置: 直接在代码中new一个View的对象. 我们今天讨论的内容就是围绕着View的构造方法的. 1.实例 首先我 ...

  10. Android scroller控件,Android Scroller完全解析

    在Android中,任何一个控件都是可以滚动的,因为在View类当中有scrollTo()和scrollBy()这两个方法,如下图所示: 这两个方法的主要作用是将View/ViewGroup移至指定的 ...

最新文章

  1. tomcat拒绝访问是为什么_Tomcat中的connectTimeout和慢攻击
  2. 超炫jQuery测试答题功能
  3. 论DATASNAP远程方法支持自定义对象作参数
  4. html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性
  5. Java——IO基础
  6. DecimalFormat的使用
  7. notePad++安装及json,xml格式化插件安装
  8. 《算法设计与分析基础》第2版
  9. php 死链查询,网站最新死链查询和处理方法
  10. 关于让div元素垂直居中的几种方法
  11. Ubuntu常用命令汇总
  12. git diff:Linux使用meld做git的diff工具
  13. 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(-)-Z3GatewayHost应用
  14. Android 资源管理利器Resources和AssetManager介绍
  15. 靶机12 PENTESTER LAB: XSS AND MYSQL FILE
  16. cad在线转换_手绘稿画好后我熬了一个通宵描图,结果组长给我说可以一键生成CAD!...
  17. Spring读源码系列之AOP--03---aop底层基础类学习
  18. 关于GR/IR—业务流程篇
  19. 深度学习入门(三)——神经元激活值的计算方法
  20. java jdk安装失败 mac_Mac环境下JDK安装方法

热门文章

  1. 米家扫地机器人尘盒怎么取_米家扫地机器人怎么清理灰尘盒
  2. 移动硬盘驱动器读到,但不显示盘符
  3. 超简单的scrapy实现ip动态代理与更换ip
  4. [转载] 百家讲坛——郦波评说曾国藩家训 上部(一)谁来拯救笨小孩
  5. 小米4c怎么添加语言怎么设置在哪个文件夹,小米4c怎么插卡 小米4c插卡方法【详细步骤】...
  6. Flutter Connection to **** was not upgraded to websocket
  7. python编写密码登录程序_python初学之用户登录的实现过程(实例讲解)
  8. Centos下查看和修改网卡Mac地址
  9. RFC 协议下载方法
  10. Iexplore.exe[XXXX]中发生未处理的win32异常”解决办法