Activity 跳转动画 -- pop animation

来源:互联网 发布:淘宝旺旺账号查询 编辑:程序博客网 时间:2024/06/05 05:47

效果图

这里写图片描述

基本实现

在 5.0 之前,Activity 的跳转动画都是通过自身的 overridePendingTransition 来实现的:

public void overridePendingTransition(int enterAnim, int exitAnim) {        try {            ActivityManagerNative.getDefault().overridePendingTransition(                    mToken, getPackageName(), enterAnim, exitAnim);        } catch (RemoteException e) {        }    }

int enterAnim, int exitAnim 都是通过 animation 资源来定义的。
需要注意的是对于 Activity 跳转动画的统一管理,以及退出动画的特殊处理。

伪代码

A —> B 的情况下

R.anim.activity_pop_in —> B 的进入动画

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/decelerate_interpolator">    <scale        android:duration="300"        android:fromXScale=".5"        android:fromYScale=".5"        android:pivotX="50%p"        android:pivotY="50%p"        android:toXScale="1.0"        android:toYScale="1.0" />    <alpha        android:duration="300"        android:fromAlpha=".4"        android:toAlpha="1" /></set>

R.animation.pop_out —> A 的退出动画

<?xml version="1.0" encoding="utf-8"?><alpha    xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="300"    android:fromAlpha="1.0"    android:toAlpha="1.0" />

R.anim.activity_pop_out —> B 的退出动画

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <scale        android:duration="300"        android:fromXScale="1"        android:fromYScale="1"        android:pivotX="50%p"        android:pivotY="50%p"        android:toXScale=".8"        android:toYScale="0.8" />    <alpha        android:duration="300"        android:fromAlpha="1"        android:toAlpha="0" /></set>

需要注意的是三个动画的 duration 要一致。

BaseActivity 对 Actiivty 跳转动画的统一管理

public class BaseActivity extends AppCompatActivity {   ...    @Override    protected void onCreate(Bundle savedInstanceState) {        if (isOverride()) {            overridePendingTransition(R.anim.activity_pop_in, R.anim.pop_out);        }        super.onCreate(savedInstanceState); }    @Override    public void finish() {        super.finish();        if (isOverride()) {            overridePendingTransition(0, R.anim.activity_pop_out);        }    }    protected boolean isOverride() {        return true;    }}

总结

步骤很简单,主要是对 animation 参数的调整。

0 0