最近项目有一需求是这样的,一个类似于CardView的控件上覆盖了一个Button。
效果图
如果用CardView,那么Button的z轴必须在CardView上方,那么Button就会出现阴影,着不符合UED要求,所以就重新写一个控件,可以带阴影效果,并且忽略z轴。
** 关键思路**
自定义控件重写onDraw方法,用画笔Paint去绘制阴影。
关键代码:
@Override
protected voidonDraw(Canvas canvas) {
setLayerType(LAYER_TYPE_SOFTWARE, null);//必须硬件不加速
Paint paint =newPaint();
paint.setColor(bgColor);
paint.setShadowLayer(shadowRadius,offset_x,offset_y,shadowColor);
canvas.drawRoundRect(newRectF(shadowRadius+offset_x,shadowRadius+offset_y,width-shadowRadius+offset_x,height-shadowRadius+offset_y),radius_x,radius_y,paint);
super.onDraw(canvas);
}
shadowColor : 阴影颜色
bgColr:背景颜色
shadowRadius:阴影半径
offset_x:阴影x轴偏移量
offset_y:阴影y轴偏移量
radius_x:圆角半径x
radius_y:圆角半径y
Tips:要绘制阴影,必须关闭硬件加速
项目地址:github.com/wangjianchi/ShadowLinearLayout.git