1. 程式人生 > >android Activity右滑返回,退出當前activity

android Activity右滑返回,退出當前activity

發現目前很多app應用,都具有左滑返回的功能,而且感覺體驗很是愉快,尤其酷狗音樂左滑返回的實現,更是炫酷。今天就學習一下具體實現。

先看一下效果圖吧: 
這裡寫圖片描述 
開發前準備,有兩種方案: 
1:新增庫檔案,點選下載(推薦用這種) 
2:新增依賴 compile ‘me.imid.swipebacklayout.lib:library:1.0.0’ 
至於為什麼是新增庫檔案呢?後面在做解釋。當然第二種方案也不是不可以的。

先寫一個 BaseActivity 繼承 SwipeBackActivity:


public class BaseActivity extends SwipeBackActivity
{
private SwipeBackLayout mSwipeBackLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSwipeBackLayout = getSwipeBackLayout(); //設定滑動方向,可設定EDGE_LEFT, EDGE_RIGHT, EDGE_ALL, EDGE_BOTTOM mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT); //mSwipeBackLayout.setEdgeSize(200);//滑動刪除的效果只能從邊界滑動才有效果,如果要擴大touch的範圍,可以呼叫這個方法
} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

然後,下面依次是:MainActivity ,SecondActivity ,ThreeActivity 分別繼承自 BaseActivity 。 
方法的呼叫都添加了註釋,就不在多說啦。

public class MainActivity extends BaseActivity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setSwipeBackEnable(false
); //主 activity 可以呼叫該方法,禁止滑動刪除 findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, SecondActivity.class)); } }); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
public class SecondActivity extends BaseActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(SecondActivity.this, ThreeActivity.class));
            }
        });
    }


    @Override
    public void onBackPressed() {
        scrollToFinishActivity();//左滑退出activity
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
public class ThreeActivity extends BaseActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);


    }

    /**
     * 當按下返回鍵時
     */
    @Override
    public void onBackPressed() {
        scrollToFinishActivity();//左滑退出activity
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

最後你還需要在清單檔案中,AppTheme 主題上,加上這個屬性,要不然activity的背景應該是黑色的,很難看:

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

到此,SwipeBackLayout基本用法就介紹完了。

下面就解釋一下,為什麼專案依賴庫,而不是直接新增依賴。 
看一下,新增依賴後 SwipeBackActivity繼承的是 FragmentActivity。 
這裡寫圖片描述

而我發現,依賴庫的話,是這樣的: 
這裡寫圖片描述

至於 繼承 AppCompatActivity 和 繼承 FramgmentActivity 有什麼區別,我就不在多說啦。 
總結:希望開源這個框架的大神,早日把 繼承FramgmentActivity改成AppCompatActivity吧。當然繼承FramgmentActivity也是可以的,不過後者更好一些,相容性也更好。

當然如果你不想用別人的開源框架,自己寫一個,來實現 activity 的滑動返回的效果,也是可以的。

參考部落格地址: