当你知道它继承FrameLayout的时候你就知道怎么使用了,但是这个CardView有很多局限性,比如不能修改阴影的颜色,不能修改阴影的深浅。这就很诡异了,根本无法满足UI设计潮流的内心。
那为了产品蒸蒸日上,早日走上人生巅峰,实现财富自由,应该如何让你的APP支持修改阴影的颜色呢?
有个很暴力的办法,就是吧CardView的代码自己抠出来,然后自己定制.
但是现在我自己探索了一个新的较为简单的添加阴影的实现方案,仅供参考
###ShadowCardView
思路:首先要明确阴影的实现思路是什么,其实就是颜色导致的视觉错觉。说白了就是在你的Card周围画一个渐变的体现立体感的颜色。
基于上述思路,我们在一个在一个view上画一个矩形的图形,让他周围有渐变色的阴影即可。于是我们想起几个API:
- 类:Paint 用于在Android上画图的类,相当于画笔
- 类:Canvas 相当于画布,Android上的view的绘制都与他相关
- 方法:paint.setShadowLayer可以给绘制的图形增加阴影,还可以设置阴影的颜色
如上图我们,红色部分使我们绘制的图形,边框以内,红色之外的是阴影的显示部分。
有了以上的知识点已经知道可以自己画阴影了,但是什么时机开始画呢?
我们知道谷歌开发的CardView的控件继承了FrameLayout,方便我们自由扩展。那么我们也需要继承FrameLayout。
ShadowCardView继承FrameLayout之后,可以重写其一个方法:
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
}
这个方法是ViewGroup在绘制子View的时候调用的,那么我们可以在这个时候进行阴影的绘制。
首先,这个方法已经为我们提供了这个View的画布:Canvas,我们可以直接在上面进行阴影的绘制,代码如下:
Paint shadowPaint = new Paint