本文介绍了Android 5.0 新特性水波纹动画的使用。
原文链接:Ripple Animation
触摸水波纹效果是在Android 5.0(API 21) 的材料设计中引入的。
材料设计中的触摸反馈在用户和UI元素交互的点提供瞬时视觉确认。例如,当按钮被触摸时显示一个水波纹效果——这是Android 5.0默认的触摸反馈动画。水波纹动画通过新的RippleDrawable
类实现。水波纹效果可以配置在View边界的末端或超出View的边界。例如,下面的图片序列说明了在一个按钮上触摸时的水波纹效果动画:
刚开始在按钮上触摸时会出现左边第一张图片所示,剩下的图片说明了水波纹效果是怎样扩散到按钮边界的。当水波纹动画完成,View恢复到初始状态。默认的水波纹动画不超过一秒,但可以自定义动画的长度。
注意水波纹效果只会在Android 5.0及以上显示,之前的版本会高亮显示。
可点击的Views
一般情况下,水波纹效果在API 21上对于常规按钮会有效果,对于其它可触摸View可以通过指定实现:
1 | android:background="?android:attr/selectableItemBackground"> |
用代码:
1 | int[] attrs = new int[]{R.attr.selectableItemBackground}; |
按钮
大多数按钮通过几个drawables处理,通常你会有一个类似于这样的文件:
/drawable/button.xml:
1 | <selector xmlns:android="http://schemas.android.com/apk/res/android"> |
如果你自定义了按钮的选择状态,你的文字颜色依赖于状态改变。因此,默认的按钮背景不会起作用。你可以为drawables添加这个反馈和使用ripple
元素简单地包装它们:
/drawable-v21/button.xml:
1 | <ripple xmlns:android="http://schemas.android.com/apk/res/android" |
使用?android:colorControlHighlight
将会给水波纹同样的颜色构建水波纹效果。
如果你不喜欢默认的灰色,你可以在你的主题中使用android:colorControlHighlight
指定你想要的颜色。1
2
3
4
5
6
7
8<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
<item name="android:colorControlHighlight">@color/your_custom_color</item>
</style>
</resources>
如果你想让水波纹效果扩散超出View的边界,你可以使用?attr/selectableItemBackgroundBorderless
代替。这会在ImageButtons和作为大View部分的小按钮起作用:
参考
- https://developer.android.com/training/material/animations.html
- https://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html
- http://code.hootsuite.com/tips-and-tricks-for-android-material-support-library-2-electric-boogaloo/
- http://appsdevelopment-for-mobiles.blogspot.com/2014/11/android-l-ripple-touch-effect.html