android微信首页activity,Android仿微信滑动退出Activity

效果图:

b6dc88a6c9066eda00d9f7c6a7ef280a.gif

原理:

原理一句话就能描述清楚。重写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 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:

以上所述是小编给大家介绍的Android仿微信滑动退出Activity,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值