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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
相关文章
Android中使用GridView和ImageViewSwitcher实现电子相册简单功能实例
本篇文章主要介绍了Android中使用GridView和ImageViewSwitcher实现电子相册简单功能实例,具有一定的参考价值,有需要的可以了解一下。2016-12-12
ImageView 实现Android colorPikcer 选择器的示例代码
本篇文章主要介绍了ImageView 实现Android colorPikcer 选择器的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-10-10
关于Fragment already added问题的解决方案
这篇文章主要介绍了关于Fragment already added问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-10-10
详解flutter中常用的container layout实例
这篇文章主要为大家介绍了详解flutter中常用的container layout实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-09-09


最新评论