学如逆水行舟,不进则退。
接触Android开发虽已经颇有时日,但感觉相关知识总停留于一知半解,或者又缺乏系统关联导致顾此而失彼。是时候总结一下了。
那就从常常开发过程中经常遇到的Android动画开始吧。
Material设计为Android增加了一种动画称为Activity过渡(Activity Transitions),旨在提供不同状态下共有元素的视觉连接。官方文档的描述,听起来拗口,读起来也不够顺畅。Activity过渡在我接触的项目中没有遇到过,今天就以它初试牛刀,既是学习,也是巩固。
类别
Activity的过渡动画总共可以分为三类:
- 进入过渡(Enter transition):定义Activity中的view如何进入界面
- 退出过渡(Exit transition):定义Activity中的view如何退出界面
- 共享元素过渡(Shared elements transition): 如果两个Activity包含了若干“共享元素”(可以理解为相同的元素控件,至少,看起来是如此),那么共享元素过渡动画,就是将这些共享元素从一个Activity优雅地过渡到另一个Activity
任何继承了Visibility类的过渡,都可以作为进入或者退出过渡。目前,Android默认支持的进入/退出过渡如下表。
过渡 | 说明 |
---|---|
explode | 移动view进入/退出界面中央 |
slide | 从界面的某一条边移入/移出view |
fade | 通过改变透明度来展现view的添加和移出 |
Android默认支持的共享元素过渡如下表。
过渡 | 说明 |
---|---|
changeBounds | 过渡view的layout bound变化 |
changeClipBounds | 过渡view的clip bound变化 |
changeTransform | 过渡view的scale和rotation的变化 |
changeImageTransform | 过渡image的尺寸和放缩比例变化 |
过渡动画
进入/退出过渡
首先,开启过渡动画需要在style中将windowActivityTransitions属性设置为true
<item name="android:windowActivityTransitions">true</item>
或者,也可以在代码中调用方法来设置
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
前面已经说过,进入、退出过渡,是指Activity中的view元素,在Activity界面显示时的动画过渡。下面,我们使用默认的Explode过渡来举个例子。
(1) SecondActivity
定义SecondActivity,用于显示进入和退出过渡,界面为一个TextView和四个定位View(用处后面会说),代码如下
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"