Android實現Activity的滑動返回效果

pm45e 9年前發布 | 90K 次閱讀 Android Android開發 移動開發

介紹

在知乎客戶端上看到了這種效果,左滑Activity可以返回到上一界面,非常適合單手操作。
這里寫圖片描述

找了很久,終于在github上看到了SwipeBackLayout這個開源項目,地址:

https://github.com/ikew0ng/SwipeBackLayout

</blockquote>

實現

需要使用到的類:

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);
}

}</pre>
在使用的主題中添加下面的屬性,否則滑動時activity的下層是黑色的

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

當使用BaseActivity時,為了使首頁不會滑動刪除,只需如下設置即可
setSwipeBackEnable(false); //禁止滑動刪除

  • 另外,這個滑動刪除的效果只能從邊界滑動才有效果,如果要擴大touch的范圍,可以調用
  • </ul>

    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;
    }</pre><br />
    

    經過上面步驟,應該就能如期實現效果了。
    下面放上我的Demo截圖:
    這里寫圖片描述

    這是Demo源碼
    開發工具:AndroidStudio

    </blockquote> 來自:http://blog.csdn.net/eiuly/article/details/46472783

 本文由用戶 pm45e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!