Android仿微信滑動退出Activity
效果圖:
原理:
原理一句話就能描述清楚。重寫Activity的dispatchTouchEvent,滑動的時(shí)候拿到Activity棧中棧頂Activity的上一個(gè)Acticity的ContentView添加到棧頂Activity的DecorView中,滑動的過程中做視圖平移,滑動結(jié)束之后把前面拿過來用的ContentView歸還給上一個(gè)Activity,然后finish當(dāng)前Activity。
ActivityStack:
實(shí)現(xiàn) Application.ActivityLifecycleCallbacks 接口,在App的Application中注冊這個(gè)棧,當(dāng)App中的Activity新增或者刪除時(shí)會回調(diào)接口中的方法。
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); } } /** * 獲取棧頂?shù)腁ctivity * * @return */ public Activity getLastActivity() { return mActivityStack.lastElement(); } /** * 獲取倒數(shù)第二個(gè)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中注冊這個(gè)實(shí)現(xiàn)類
registerActivityLifecycleCallbacks(mBackStack);
DecorView:
1.DecorView 為整個(gè)Window界面的最頂層View
2.DecorView只有一個(gè)子View LinearLayout,代表整個(gè)Window界面,包括ton通知欄,標(biāo)題欄,和內(nèi)容區(qū)域。
3.獲取DecorView:activity.getWindow().getDecorView()
滑動:
重寫Activity的dispatchTouchEvent,設(shè)定一個(gè)閥值,在閥值內(nèi)出發(fā)時(shí)拿到上一個(gè)Activity的ContentView添加到當(dāng)前的DecorView中,index為0,置于最低定?;瑒拥倪^程中動態(tài)改變?nèi)萜鞯腦值,讓其做出平移效果,松開手之后做取消或者關(guān)閉動畫。動畫結(jié)束后把前面拿到的ContentView歸還。
DEMO:
https://github.com/gumingwei/SwipeBackActivity
以上所述是小編給大家介紹的Android仿微信滑動退出Activity,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Android 處理 View 重復(fù)點(diǎn)擊的多種方法
這篇文章主要介紹了Android 處理 View 重復(fù)點(diǎn)擊的多種方法,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03Android中使用GridView和ImageViewSwitcher實(shí)現(xiàn)電子相冊簡單功能實(shí)例
本篇文章主要介紹了Android中使用GridView和ImageViewSwitcher實(shí)現(xiàn)電子相冊簡單功能實(shí)例,具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-12ImageView 實(shí)現(xiàn)Android colorPikcer 選擇器的示例代碼
本篇文章主要介紹了ImageView 實(shí)現(xiàn)Android colorPikcer 選擇器的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-10-10Android 軟鍵盤彈出隱藏?cái)D壓界面等各種問題小結(jié)
這篇文章主要介紹了Android 軟鍵盤彈出隱藏?cái)D壓界面等各種問題的相關(guān)知識,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11關(guān)于Fragment?already?added問題的解決方案
這篇文章主要介紹了關(guān)于Fragment?already?added問題的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10詳解flutter中常用的container layout實(shí)例
這篇文章主要為大家介紹了詳解flutter中常用的container layout實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09