android 动画系列 (5) - ripple 波纹动画

这是我这个系列的目录,有兴趣的可以看下: android 动画系列 - 目录

说波纹是动画其实是有点勉强的,应该叫波纹触摸反馈。废话不多说,先看看效果图,再细说:


android 动画系列 (5) - ripple 波纹动画_第1张图片
ezgif.com-video-to-gif.gif

看着熟悉吧,一般人很少有提到 ripple 的,我也是偶然才看到这方面的资料的。ripple 是在5.0版本才提供的交互效果,本意是优化 android 体验,以抗衡IOS。看到5.0本能的就会想到兼容问题,经过测试很遗憾,4.X 版本跑不了,ripple 是用 xml 定义的,在4.X 版本上无法解析 ripple 这个 xml 标签。

ripple 的类是 RippleDrawable,父类是 LayerDrawable,可见google 是使用多层层叠 drawable 来实现的这个波纹效果,点击时会有应该的操作,平时不显示,只显示我们的底色。

好了,来看看 ripple 的用法把,ripple 是一张 drawable 图片,作为背景色使用,系统提供了2种默认实现:

  • selectableItemBackground:波纹被限制在控件的边界中
  • selectableItemBackgroundBorderless:波纹会呈圆形发散出去,不会被限制
 

波纹被限制在控件的边界中:


android 动画系列 (5) - ripple 波纹动画_第2张图片
ezgif.com-video-to-gif.gif

波纹会呈圆形发散出去,不会被限制:


android 动画系列 (5) - ripple 波纹动画_第3张图片
ezgif.com-video-to-gif.gif

特意把控件设置成矩形,可以看到ripple 的圆形是以控件的对角线为直径的

系统提供的改不了颜色,所以我们来看看如何自定义:

ripple 既然是一个 drawable,那么我们就是可以使用 xml 来自定义的,所有的 drawable 都可以使用 xml 来自定义



    
    

解释下,item 表示我们设置几张图片进去,当然也可以直接使用颜色,带 android:id="@android:id/mask" 的 item 表示 设置ripple 波纹图层的图片,ripple效果=限制在控件的边界中,不带 id 的 item 表示默认背景图片

效果图:


android 动画系列 (5) - ripple 波纹动画_第4张图片
ezgif.com-video-to-gif.gif

要是想用波纹散发出view 的效果:




在 ripple 跟标签里设置颜色就可以,但这样我们要是再添加item的话,item 是不会再显示出来的,我试过就是这样的,可能是 google 做的不就是很到位

效果图:


android 动画系列 (5) - ripple 波纹动画_第5张图片
ezgif.com-video-to-gif.gif

还有一种写法,没验证过



    
        
            
            
            
            
        
    

ps:ripple 就这么多了,用起来挺简单,但是注意不兼容4.X版本,害的麻烦写兼容的 drawable 文件夹


参考资料:

  • Ripple 效果总结

你可能感兴趣的:(android 动画系列 (5) - ripple 波纹动画)