码迷,mamicode.com
首页 > 其他好文 > 详细

实现Activity的滑动返回效果

时间:2017-07-23 15:20:59      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:split   tle   views   and   string   tran   git   ann   方法   

介绍

在知乎client上看到了这样的效果。左滑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截图:
技术分享

这是Demo源代码
开发工具:AndroidStudio

实现Activity的滑动返回效果

标签:split   tle   views   and   string   tran   git   ann   方法   

原文地址:http://www.cnblogs.com/clnchanpin/p/7224557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!