动画可以增强产品的用户体验,也可以带来很多乐趣。今天我将演示如何为view和Activity添加左右滑动的动画。注:不是属性动画,而是安卓早期引入的补间动画,对于此处的应用场景来说足够了。
首先来看看我们将要创建的动画效果。Activity根据导航的方向滑入滑出:

定义动画
我们总共需要四个动画,将在xml中定义它们。这四个动画其实可以分为两组。第一组是将View移动出视野,第二组是把View从视野之外移进来。
slide_to_left.xml:
从当前位置一直向左滑动,直到离开视野。

slide_to_right.xml:
从当前位置一直向右滑动,直到离开视野。

slide_from_left.xml:
view从左边滑入

slide_from_right.xml:
view从右边滑入

每个动画的持续时间都为@integer/slide_animation_duration,定义在integers.xml中,如下:

这样可以让动画保持连贯性,所有的动画都以相同的速度移动。
应用到View上
对一个View应用动画很简单,我们只需把从xml加载的动画应用到View就可以了:

我喜欢为这些相关的动画组创建一个工具类,尤其是它们在应用中使用的比较普遍的情况下。
有兴趣的加入Android工程师交流Q群:752016839 主要针对Android开发人员提升自己,突破瓶颈,相信你来学习,会有提升和收获。


工具类创建好了之后,我们就可以在应用中任意的使用了,如下:

Activity之间
在Activity之间使用动画也很简单。Activity类为我们提供了一个叫做[overridePendingTransition](https://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int, int))的方法,我们可以用它来设置进入和退出动画。如下:
有兴趣的加入Android工程师交流Q群:752016839 主要针对Android开发人员提升自己,突破瓶颈,相信你来学习,会有提升和收获。

在调用startActivity之后调用overridePendingTransition可以让新的Activity运行enterAnimationId,而当前Activity运行exitAnimationId。
把我们早先定义好的动画放进来,我们就可以让新的Activity从右边滑进来,而当前的Activity滑离至左边视野之外,如下:

类似的,当新的Activity结束之后,我们可以执行相反的动画,让结束的Activity滑出至右边视野之外,而之前的Activity从左边滑回来:

这样就能做到Activity之间来回流畅的切换,比Activity默认的动画要好。
保持一致
我绝大多数应用都创建了一个BaseActivity类,把一些可以共享的常见的功能都放在里面,比如log和显示fragment。因为我想让所有的activity切换效果都保持一致,所以我觉得把它放在BaseActivity实在再合适不过了:

你也可以像我这样重写startActivity和finish,这样就不需要直接调用了。记住要调用super方法,并重写所有衍生方法,比如startActivityForResult。
现在你如果想改变动画效果,只需在更新一个地方就行了。
网友评论