不要小看“阴影”这两个字,阴影其实是个很复杂的东西。比如:
这是顶部没有阴影的阴影 这是顶部有阴影的阴影 这是两边比较多的阴影 这是往右下倾斜的阴影 这是在底部内聚的阴影看到这么多细节,真让人头大。于是我们的程序员开始去网上搜索各种阴影的实现方法,比如:
1.CardView自带的阴影,参数非常有限而且非常不灵活,不能控制角度和各种阴影的细节。
2.用xml的layer-list去叠好多shape来充当阴影,但层次太多而且很难维护。
3.Paint.setShadowLayer了,参数不多而且不支持硬件加速。
这些办法不仅消耗很多开发测试时间,而且效果有很大局限性。设计师效果图上的细节一不小心就实现不了。
实现阴影的问题的困难核心其实在于,阴影本来是一个多变的东西。根据前布局高度不同,光源大小,光照角度不同,得到的阴影都是不一样的。
所有用代码去在前布局上做阴影的尝试必然都有局限性,不灵活,难维护的问题。
这么复杂的阴影,它根本就不应该和前布局在一起,它应该独立出来,作为单独的View!
所以答案就很简单了:
让UI设计师出一个纯阴影的图,边上是透明渐变模糊的,比如这种:
把这个图设置到ImageView里,调整好大小位置,放到到你的前布局后面,然后OK了。
上面的五个例子我都是用这种方法实现的,每个例子只需要几秒钟就可以调好。
这样阴影的角度、位置、大小都是非常可控的。而且对设计师来说几乎零成本,他再也不会嫌弃你的阴影不符合他的要求,非常容易进行后期微调。上面的五个例子我都是用这种方法实现的,每个例子只需要几秒钟就可以调好。
网友评论