https://github.com/traex/RippleEffect
http://www.cnblogs.com/tiantianbyconan/p/4116304.html
- rv_alpha 即paint.setAlpha()中设定的值,就是透明度,其取值范围是0---255,数值越小,越透明,颜色上表现越淡。
- rv_framerate 是RippleEffect波纹每次半径增加相关的一个参数,值越大,每次的半径增量越大,效果看起来也就越粗糙。
- rv_rippleDuration 就是RippleEffect波纹的范围了,超过此范围,就不再绘制了。
- rv_zoomDuration 为RippleEffect波纹的持续时间。
- rv_color 为RippleEffect波纹的颜色。
- rv_centered值为true, 则波纹的触发点为View的中心,否则为触摸点的位置。
- rv_type 为波纹效果的类型,simpleRipple就是最常见的那种,只产生一圈涟漪效果,doubleRipple两圈涟漪,rectangle的效果代码中没具体实现。
- rv_zoom值为true, 会有一个缩放的效果,rv_ripplePadding为和RippleEffect波纹半径相关的一个参数,rv_zoomScale为缩放动画结束时Y坐标上的伸缩尺寸。
在初始化的时候,animationRunning值已被置为true,主要是为了保证一次完整地波纹效果不会被打断。首先执行canvasHandler.postDelayed(runnable, frameRate);每隔frameRate的时间,执行一次invalidate()。 canvas.save()用来保存Canvas的状态,注意在绘制结束的时候调用了canvas.restore(),成对使用。然后就开始绘制波纹了,每次的半径增量为(radiusMax * (((float) 1 * frameRate) / rippleDuration),每隔rameRate绘制一次。rippleType == 1的时候,保证在绘制到一定的时候,setAlpha的值加深,形成两次涟漪,否则setAlpha值就一直递减,波纹越大效果越弱。最后当rippleDuration <= timer * frameRate的时候,就return了,RippleEffect波纹效果结束。
最后在XML中直接拿来用就可以了:
时间: 2024-09-30 09:02:54