Material Design——RippleDrawable详解

10 篇文章 0 订阅

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的时候还是想的很周到

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值