首页 > 系统 > Android > 正文

Android仿微信滑动退出Activity

2019-12-12 04:11:36
字体:
来源:转载
供稿:网友

效果图:


原理:

        原理一句话就能描述清楚。重写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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表