效果圖:

原理:
原理一句話就能描述清楚。重寫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:
1.DecorView 為整個Window界面的最頂層View
2.DecorView只有一個子View LinearLayout,代表整個Window界面,包括ton通知欄,標題欄,和內容區域。
3.獲取DecorView:activity.getWindow().getDecorView()
滑動:
重寫Activity的dispatchTouchEvent,設定一個閥值,在閥值內出發時拿到上一個Activity的ContentView添加到當前的DecorView中,index為0,置于最低定。滑動的過程中動態改變容器的X值,讓其做出平移效果,松開手之后做取消或者關閉動畫。動畫結束后把前面拿到的ContentView歸還。
DEMO:
https://github.com/gumingwei/SwipeBackActivity
以上所述是小編給大家介紹的Android仿微信滑動退出Activity,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
新聞熱點
疑難解答