Android实现Activity的滑动返回效果
pm45e
9年前
介绍
在知乎客户端上看到了这种效果,左滑Activity可以返回到上一界面,非常适合单手操作。
找了很久,终于在github上看到了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截图:
来自:http://blog.csdn.net/eiuly/article/details/46472783这是Demo源码
开发工具:AndroidStudio