原理:
原理一句话就能描述清楚。重写Activity的dispatchTouchEvent,滑动的时候拿到Activity栈中栈顶Activity的上一个Acticity的ContentView添加到栈顶Activity的DecorView中,滑动的过程中做视图平移,滑动结束之后把前面拿过来用的ContentView归还给上一个Activity,然后finish当前Activity。
ActivityStack:
实现 Application.ActivityLifecycleCallbacks 接口,在App的Application中注册这个栈,当App中的Activity新增或者删除时会回调接口中的方法。
public class ActivityBackStack implements Application.ActivityLifecycleCallbacks { private Stack<Activity> mActivityStack; public ActivityBackStack() { mActivityStack = new Stack<>(); } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { mActivityStack.add(activity); } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { if (activity != null) { mActivityStack.remove(activity); } } /*** 获取栈顶的Activity** @return*/ public Activity getLastActivity() { return mActivityStack.lastElement(); } /*** 获取倒数第二个Activity** @return*/ public Activity getPreActivty() { int size = mActivityStack.size(); if (size < 2) { return null; } return mActivityStack.get(size - 2); } public int getSize() { return mActivityStack.size(); } }然后在Application中注册这个实现类
registerActivityLifecycleCallbacks(mBackStack);DecorView: