Google在Android5.0之后推出了Material Design的设计风格,而涟漪Ripple
效果是其中最具有代表性的。
最近需要在项目中使用Ripple效果,看了网上很多介绍,大致都写的很基础,并且没有介绍清楚具体对应的使用方法,只有比较常见的几种。在碰到一些特殊情况后就不能适用了。因此这里总结下RippleDrawable的关键推荐的几种用法。
带约束的ripple
最常见的使用方法,直接通过<Ripple>
标签对进行使用,除了必要的color
属性以外,还需要指定一个item
用于设置背景颜色,当然也可以不设置,不设置的情况下面会介绍。ripple父标签下的color属性决定了涟漪效果的颜色,而item下的Drawable是涟漪效果的范围,也是背景,涟漪效果会展示在该Drawable之上,因此shape
属性是可以兼容的,并且涟漪的显示效果会因为Drawable的不同而不同。大致代码如下:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ColorRipe">
<item
android:drawable="@color/colorBlack"/>
</ripple>
不带约束的ripple
上面说了除了基本的Ripple
标签以外还需要设置一个item
标签对Ripple进行“约束”,那么既然需要约束,也就是说是可以不要约束的,当我们没有指定item标签的时候,同样也会触发涟漪效果,不过这个效果与之不同的地方在于不会有约束,最直观的表现为涟漪可以超出当前设置的View进行展示,整个涟漪其实会显示成一个逐渐放大的园,最大为当前布局的父容器边界,这种类型的涟漪显示出来就是我们设置的颜色,不会受到其他因素的影响,但是不够美观,正常情况不推荐使用。
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ColorRipe">
</ripple>
带对比色的ripple
细心的人可能注意到了,第一种情况有一个缺点,需要约束就必须设置一个
item
的背景,该背景色是真实存在的,并且涟漪效果会受到该背景色的影响而不同,简单来说就是背景色和涟漪色对比越大,背景色颜色越深,涟漪效果越明显,因此我们如果需要一个较好的效果便只能设置一个深色的背景颜色,这样可能会违背我们的需求,并且当背景为透明时涟漪效果不能显示,也就是我们在约束了涟漪范围的情况下做不到背景透明,只保留涟漪效果。而使用第二种方法虽然可以单独显示,但是效果不佳,曾经我就是被这种情况困扰了很久,最后查阅官方文档才发现有第三种方式。该方式和第一种类似,同样需要设置
item
背景进行约束,但是有一点不同,他的背景不是真实可见的,只是起到范围约束和涟漪效果影响的功能,在触发涟漪之前不会被显示出来。并且可以和普通的背景搭配使用,也就是普通的背景用于视图的显示,这种背景用于约束涟漪效果。
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ColorRipe">
<item android:drawable="@color/colorBk"/>
<item
android:id="@android:id/mask"
android:drawable="@color/colorBlack"/>
</ripple>
补充
最后说一个我遇到的问题,在一个imageView设置了图片之后想要为其添加涟漪的点击效果,由于设置图片属性src
的层级高于background
因此效果不会被显示出来,这里需要用到一个并不常用的属性foreground
,看到后应该都知道是前景的意思,但是没用过的话确实会很难想到有这个属性,该层级应该是view里面最上层的,因此即便设置了src也能正常显示。不得不说Google之前开发这些API的时候还是想的很周到