Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android資訊 >> Android實現Activity的滑動返回效果

Android實現Activity的滑動返回效果

編輯:Android資訊

介紹

在知乎客戶端上看到了這種效果,左滑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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved