现在好多设计都喜欢用阴影,各种颜色、各种图形的阴影做起来费时费力,而官方的cardview不支持设置阴影颜色,阴影位置也是更拟物化的z轴阴影,不能符合设计的要求,因此专门写了一个工具。
GitHub地址:https://github.com/maxiaoyi/FpShadowLayout
用法:implementation 'com.mxy.fpshadowlayout:fpshadowlayout:0.0.1'
效果如图:
核心实现是用LinearGradient,自定义viewGroup,设置阴影长度对应的padding,画出阴影。
首先,来看一下LinearGradient的用法:
int[] colors = {Color.parseColor("#ff0000"), Color.parseColor("#00ffffff")};
float[] floats = new float[]{0f, 1.0f};
LinearGradient gradient = new LinearGradient(0,0,100,0,colors, floats, Shader.TileMode.CLAMP);
paint.setShader(gradient);
RectF rectF = new RectF(0, 0, 100, 50);
canvas.drawRect(rectF, paint);
colors是一组颜色数组,代表颜色从哪一种过渡到另外一种,可是两个或者三个颜色。floats是位置权重的数组,代表每一种颜色所占位置的权重,同样可以是两个或者三个,数量要和colors对应。
lineargradient的构造方法中,重点说一下前面四个参数,这四个参数实际上是定义了渐变的方向,x如果从0到n,y是从0到0的话,表示渐变在x轴上从左往右平铺。代码
new LinearGradient(0,0,100,0,colors, floats, Shader.TileMode.CLAMP);
具体效果:
接下来变一下,x从n到0,y不变:
可以看到颜色反转了,变成从右往左平铺。接下来x保持都是0,y从0到n:
此时颜色变成了y轴上从上往下平铺&