Android仿微信滑动退出Activity
效果图:
原理:
原理一句话就能描述清楚。重写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,希望对大家有所帮助