关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java


介绍

在知乎客户端上看到了这种效果,左滑Activity可以返回到上一界面,非常适合单手操作。

Android实现Activity的滑动返回效果

找了很久,终于在github上看到了SwipeBackLayout这个开源项目,地址:

https://github.com/ikew0ng/SwipeBackLayout

实现

需要使用到的类:

SwipeBackActivity.java
SwipeBackLayout.java
ViewDragHelper.java

使当前的Activity继承SwipeBackActivity

public class BaseActivity extends SwipeBackActivity {

    private SwipeBackLayout mSwipeBackLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSwipeBackLayout = getSwipeBackLayout();
        //设置滑动方向,可设置EDGE_LEFT, EDGE_RIGHT, EDGE_ALL, EDGE_BOTTOM
        mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);
    }
}

在使用的主题中添加下面的属性,否则滑动时activity的下层是黑色的

<item name="android:windowIsTranslucent">true</item>

当使用BaseActivity时,为了使首页不会滑动删除,只需如下设置即可

setSwipeBackEnable(false); //禁止滑动删除
  • 另外,这个滑动删除的效果只能从边界滑动才有效果,如果要扩大touch的范围,可以调用
mSwipeBackLayout.setEdgeSize(int size);

但是上面这个方法不太好用,效果不明显,推荐修改ViewDragHelper.java这个类源码中的getEdgeTouched(int x, int y)方法,如下

private int getEdgeTouched(int x, int y) {
        int result = 0;

        result = EDGE_LEFT;//这样每次都是全屏左滑删除

        //解决只有点击屏幕左边才有响应的问题
        /*if (x < mParentView.getLeft() + mEdgeSize)
            result = EDGE_LEFT;
        if (y < mParentView.getTop() + mEdgeSize)
            result = EDGE_TOP;
        if (x > mParentView.getRight() - mEdgeSize)
            result = EDGE_RIGHT;
        if (y > mParentView.getBottom() - mEdgeSize)
            result = EDGE_BOTTOM;*/

        return result;
    }

经过上面步骤,应该就能如期实现效果了。

下面放上我的Demo截图:

Android实现Activity的滑动返回效果

这是Demo源码

开发工具:Android Studio

.................... 【.........阅读全文】

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐