该效果是通过自定义界面来实现的
1、首先自定义属性,attrs.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RippleView">
<attr name="rippleColor" format="color" />
<attr name="rippleAlpha" format="float" />
<attr name="maskAlpha" format="float" />
<attr name="rippleTime" format="integer" />
</declare-styleable>
</resources>
其中属性rippleColor为水波动画的颜色,rippleAlpha为其透明度,rippleTime为动画持续时间,maskAlpha为触摸遮掩层的透明度
2、自定义RippleView类继承RelativeLayout布局,也可以由需求所定继承于其它类,实现水波扩散效果主要的有两点:水波扩散的绘制和动画
1)水波的绘制其实就是绘制一个圆形
canvas.drawCircle(mDownX, mDownY, mRadius, mRipplePaint);
2)动画效果就是该圆形的绘制从小到大的过程,而该圆形到最大时的半径长度就是当前所在布局的对角线长度:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// 获取最大半径
m