在Android5.0(API Level 21)以后,可以使用Material Design(MD)中的动画可以给用户提供触摸反馈和一致性交互体验。Activity&Fragment过渡动画就是MD中动画的一种,接下来介绍MD中其它类型的动画。
Ripple Animation
MD大量使用了Ripple效果,即点击后View后,产生波纹效果,这个效果主要用于触摸反馈。
可以通过如下代码设置View的波纹背景:
1 | // 有边界波纹 |
如果要修改默认波纹的颜色,可以使用主题中android:colorControlHighlight属性进行设置。
还可以在XML文件中,直接创建Ripple效果的背景资源:
1 | <?xml version="1.0" encoding="utf-8"?> |
Reveal Animation
Reveal动画为显示或隐藏一组UI元素提供视觉一致性体验,具体表现为一个View以圆的形式展开。使用ViewAnimationUtils.createCircularReveal()方法创建Reveal动画。
展现隐藏的View:
1 | // previously invisible view |
隐藏可见的View:
1 | // previously visible view |
View State Changes Animation
在Android5.0以后,可以为View的状态改变设置一个状态切换动画。
StateListAnimator
StateListAnimator作为视图改变时的动画效果时,通常使用Selector进行设置。示例代码如下:
1 | <!-- animate the translationZ property of a view when pressed --> |
定义好对应的XML文件后,将其作为View的android:stateListAnimator属性,就可以使用对应的动画。
同样的,可以在代码中调用AnimatorInflater.loadStateListAnimator()方法加载XML文件,然后通过View.setStateListAnimator()方法将动画设置到对应的View上。
当时用Material主题时,Button默认带有translationZ的动画,如果不需要这个动画,可以将android:stateListAnimator属性设置为@null。
AnimatedStateListDrawable
AnimatedStateListDrawable可以为View的状态切换设置可绘制动画,Android5.0中很多系统组件就使用了这样的的动画效果,具体可以通过animated-selector进行定义,示例代码如下:
1 | <!-- res/drawable/myanimstatedrawable.xml --> |