现在的App绝大多数都带有底部导航栏,Google Material Design也给出了Bottom navigation的设计规范。点击查看
为了提高开发效率,我写了一个底部开源控件,本文主要讲关于向下兼容点击水纹效果和类似QQ粘性拖拽效果的实现方法。
首先看效果图:
关于点击水纹效果其实实现方法很简单。就是画半透明圆,增大半径,不停的重绘直到圆的半径达到你设定的最大值。可以在父容器中捕捉点击的位置然后在viewgroup中绘制圆环实现水纹效果,这样做的好处是每一个view在外面包一层的viewgroup则即可以实现,不用每个view都去实现重绘方法。
核心方法:
/**
*rippleRate:速率
*rippleTime:时间
*rippleDistance:距离=时间*速度,本方法通过rippleTime++,来扩大圆的半径
/**
//点击才开始绘制圆
if (isRippleDrawing) {
//已经绘制最大圆环 停止继续绘制
if (rippleDistance<= rippleTime * rippleRate) {
isRippleDrawing = false;
rippleTime = 0;
//刷新视图
refreshView();
}
else {
mHandler.postDelayed(runnable, 10);
}
//从点击的位置绘制圆
canvas.drawCircle(downX, downY, radiusMax * (((float) rippleTime *rippleRate)