在EasyConstraintLayout内部定义一个静态类LayoutParams继承ConstraintLayout.LayoutParams,然后在构造方法中读取上面自定义的属性。我们通过裁剪的方式实现圆角效果,因此还有要获取子view的位置和大小。

static class LayoutParams extends ConstraintLayout.LayoutParams
implements EasyLayoutParams{
private LayoutParamsData data;
public LayoutParams(Context c, AttributeSet attrs) {
super(c, attrs);
data = new LayoutParamsData(c, attrs);
}
@Override
public LayoutParamsData getData() {
return data;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
public interface EasyLayoutParams {
LayoutParamsData getData();
}
1
2
3
public class LayoutParamsData {
int radius;
int shadowColor;
int shadowDx;
int shadowDy;
int shadowEvaluation;

public LayoutParamsData(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.EasyLayout);
radius = a.getDimensionPixelOffset(R.styleable.EasyLayout_layout_radius, 0);
shadowDx = a.getDimensionPixelOffset(R.styleable.EasyLayout_layout_shadowDx, 0);
shadowDy = a.getDimensionPixelOffset(R.styleable.EasyLayout_layout_shadowDy, 0);
shadowColor = a.getColor(R.styleable.EasyLayout_layout_shadowColor, 0x99999999);
shadowEvaluation = a.getDimensionPixelOffset(R.styleable.EasyLayout_layout_shadowEvaluation, 0);
a.recycle();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
圆角和阴影实现原理
因为我们是通过父布局控制子view的圆角和阴影行为,所以我们重写drawChild来实现,drawChild之前,先通过paint的ShadowLayer属性把子View的阴影先画上,这个阴影需要裁剪掉子view自身的大小位置。然后再画子view,并且裁剪圆角部分,最终实现圆角阴影效果。裁剪起初我们想到的是通过canvas的clipPath方法实现,但是发现会有很大的锯齿。所以改用paint的xfermode来裁剪阴影和子view。
---------------------

最新文章

  1. nodejs 使用Google浏览器进行可视化调试——Node Inspector工具
  2. Windows平台下PHP开发环境的配置
  3. 数学 赛码 1010 GCD
  4. C#生成唯一的ID保存到数据库
  5. 离线安装chrome插件
  6. APM 终端用户体验监控分析(上)
  7. C# rmi例子
  8. Android TextView和EditText属性详解
  9. windows消息钩子
  10. Keil "RECURSIVE CALL TO SEGMENT"彻底解决
  11. Ubuntu 配置Tomcat环境
  12. 计算机学院大学生程序设计竞赛(2015’12) 1009 The Magic Tower
  13. Java实现压缩文件与解压缩文件
  14. 大硬盘(大于2T)分区方法
  15. python 十大web框架排名总结
  16. springboot集成druid+mybatis连接oracle数据库
  17. RSA/SHA1加密和数字签名算法在开放平台中的应用
  18. spring ico
  19. 剑指offer:二叉树中和为某一值的路径
  20. CSS的再一次深入(更新中···)

热门文章

  1. TensorFlow学习笔记9-深度模型的优化
  2. 20191023 XXL-JOB
  3. python控制流-流程控制语句
  4. [Git] 005 初识 Git 与 GitHub 之分支
  5. C# DataSet转JSON
  6. [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)
  7. 【题解】Shortest Cycle
  8. 搜索(DFS)---填充封闭区域
  9. jQuery——超链接提示
  10. Windows 进入上帝模式窗口