編輯:關於Android編程
效果圖:
原理:
原理一句話就能描述清楚。重寫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,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
通過本文帶大家一起看過UIL這個國內外大牛都追捧的圖片緩存類庫的緩存處理機制。看了UIL中的緩存實現,才發現其實這個東西不難,沒有太多的進程調度,沒有各種內存讀取控制機制
開發Android APP微信支付功能,需要完成三個步驟:第一步生成預支付訂單、第二步生成微信支付參數、第三步調起微信APP支付。除了需要審核通過的APP應用外,還需要獲
應用層面如何獲得已經安裝應用的大小?網上找了一下有兩種方法:1、直接拿到data目錄下對應的包,然後用File.length()方法獲得。然後會發現和設置裡顯示的大小不同
Android組件之間的通信有多種實現方式,Broadcast就是其中一種。在activity和fragment之間的通信,broadcast用的更多本文以一個activ