更靓更自由的卡片布局LCardView

前言

自Android5.0发布MD设计理念以来,CardView被使用在的大部分app上面,然而原生的CardView是存在局限性的,它无法满足设计师们各式各样的脑洞设计,比如淡的几乎看不见的阴影,带颜色的阴影,偏移出地球轨道的阴影…等等,因而很长一段时间以来我只能使用设计师的切图,但是一旦设计师觉得旧的样式不够潮了,要换个颜色啊,圆角大小啊,偏移量等等,我们还得换一下图片资源,不够优雅的同时也增加了包的体积,在Github上寻求的各种解决方案,我觉得还不够满足自身的要求,所以打算写一个自己的卡片布局LCardView.

实现方案

因为需要这个卡片布局能够通用,所以阴影创建的方式就不能使用Android的高版本api,这里我采用的是 LinearGradient 线性渐变着色器与 RadialGradient 圆形渐变着色器配合创建出整体阴影,分别为上下左右4个线性着色器,4个角圆形着色器,计算好8个着色器的绘制区域,分别绘制。这个方案其实难度不大,主要是在于计算着色器的绘制区域以及着色器渐变色值的设定,毕竟我希望这个布局具备高度自由定制阴影的能力。
既然是布局,那么就需要进行 measure,layout 等操作,仿照原生的 CardView,这里 LCardView 继承于 FrameLayout,测量和布局由父类承担(由于个人项目需求,实际上对测量做了一定的修改),利用padding 属性为阴影预留绘制空间,最后在 dispatchDraw 中裁剪子View完成效果。
有兴趣的话,LCardView 详细的实现大家可以到 github 上面查看,如果觉得有用,顺便 star 一下给个支持,这里我就不赘述过多的细节,先贴一下效果图吧:

圆角设置

在这里插入图片描述

阴影的偏移量

在这里插入图片描述

阴影颜色与透明度

在这里插入图片描述

阴影高度

在这里插入图片描述

卡片与阴影圆角的同步设置

在这里插入图片描述

特殊效果:线性书本阴影(瞎取名别吐槽)

在这里插入图片描述

特殊效果:底部扭曲

在这里插入图片描述

卡片列表

在这里插入图片描述
根据ViewPropertyAnimator的模式,LCardView 也增加了链式设置多属性最后生效的api,减少变量的创建;仿 Glide 的 BitmapPool 创建了着色器以及位图的缓存池,便于卡片列表的复用,减少内存开销;
更多详细的内容大家可以到LCarView上查看,有什么问题也可以留言给我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值