update一下,下面方法现在来看很low,其实最简单的是直接自定义一个drawable
=============================================================
android上大部分时候阴影是不符合产品需求的,就比如我们就要求实现一个类似ios的圆形图片的阴影???
cardview阴影就挺好,可是他喵了个咪的,不符合需求啊
那么该怎么实现类似cardview或者类似ios上面的阴影效果呢?
暂时只跟踪了cardview和floatingActionButton的实现
1、cardview是通过setCardElevation来设置阴影的,通过跟踪代码可以发现cardview最终会调用RenderNode进行底层实现,要跟底层实现可以去找android framework层的代码,当然我们只是为了简单的实现一个阴影效果,所以暂不讨论其底层具体实现
2、FloatingActionButton,通过跟踪代码可以发现它是通过drawable来实现的,很明显,对我们来说通过drawable来实现更简单一些
实现的过程中还遇到一个问题,就是在4.4之前以及5.0之后drawable中的gradient显示差距巨大,这是android的一个bug,具体参考 https://issuetracker.google.com/issues/37007621
不过在将drawable改为代码实现后会稍微好一些,所以也算一个解决方案吧
具体实现思路:
通过构建gradientdrawable实现阴影渐变,然后将drawable转为bitmap(由于后面要做高斯模糊,所以尽量构建一个小一点的bitmap),再将bitmap进行高斯模糊,之后将bitmap作为背景设置到一个imageview上,当然这样实现的一个弊端就是我们需要在要展示的图片后面再放一张图片-。-,没什么好思路,感觉这样子实现最好的方式就是自定义一个viewgroup,预留空间然后构建阴影,再或者设置一个backgournd一个foreground,然后将foreground进行一定比例的缩放?或许可以,之后再研究吧,也不是什么主要功能
不过有一个好处,只要是gradient可以画出来的渐变,我们都可以做成阴影,可以自定义颜色自定义形状
附4.4以及5.0以上效果图
4.4
5.0+