Android仿微信滑動退出Activity
效果圖:

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

