很多Android App上已经增加了Activity右滑退出的效果,这个功能通常可以叫做SwipeBackActivity。这个效果最早来源于iOS,这样的操作优化确实提升了用户体验。在github上大概看了一下,实现很多也比较复杂。本文将介绍一种简单的方法来实现这个功能,只需在页面中调用两行代码就可以轻松搞定,对页面基本没有侵入性。
先来看一下最终的效果图
正式介绍代码之前,先来说明讲基本原理。我们知道在Android的PhoneWindow中包含一个DecorView,它是整个Activity的根View,实际上就是一个FrameLayout。DecorView中又会一个子View(一个资源id名字为content的FrameLayout),我们称之为contentView,它是我们页面布局的parent布局,即我们通过setContentView()方法设置的布局就是直接添加到这个id为content的FrameLayout上。如果将我们自己定义的View称作userView,那么DecorView、contentView和userView这三个View之间就是依次包含的关系。
有了上面的这些概念,就可以很容易的实现我们的功能。我们只需要将DecorView、contentView背景设置成透明,然后将userView根据用户的手势向右进行移动,当userView全部移动出屏幕之后将Activity销毁,就形成了Activity右滑退出的假象。
下面来看一下具体的代码实现。
private int mScreenWidth;
private int mTouchSlop;
private boolean isMoving = false;
private float mInitX;
private float mInitY;
private ViewGroup decorView;//窗口根布局
private ViewGroup contentView;//content布局
private ViewGroup userView;//用户添加的布局
private ArgbEvaluator evaluator;
private ValueAnimator mAnimato