實現Activity的滑動返回效果,activity滑動返回
介紹
在知乎用戶端上看到了這種效果,左滑Activity可以返回到上一介面,非常適合單手操作。
找了很久,終於在github上看到了SwipeBackLayout這個開源項目,地址:
https://github.com/ikew0ng/SwipeBackLayout
實現
需要使用到的類:
SwipeBackActivity.javaSwipeBackLayout.javaViewDragHelper.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源碼稍後會放上來。