關(guān)于SwipeBackLayout的使用以及那些坑

現(xiàn)在很多Android應(yīng)用上都增加了Activity右滑退出的效果,這個(gè)效果最早來(lái)源于iOS,這樣的操作優(yōu)化確實(shí)提升了用戶體驗(yàn)。所以目前很多App在Android上也新增了這一功能,例如簡(jiǎn)書(shū)、酷狗音樂(lè)等,今天我就來(lái)學(xué)習(xí)一下可以實(shí)現(xiàn)這個(gè)功能的開(kāi)源框架SwipeBackLayout。
下面先看一下具體效果圖:


SwipeBackLayout的使用方法

首先在開(kāi)發(fā)前將SwipeBackLayout開(kāi)源庫(kù)添加到項(xiàng)目中,添加庫(kù)的方式有兩種:

  • 直接添加庫(kù)文件
  • 添加依賴 compile 'me.imid.swipebacklayout.lib:library:1.0.0'

之后我們寫(xiě)一個(gè)基類Activity繼承自庫(kù)中的SwipeBackActivity,代碼如下:

public class BaseActivity extends SwipeBackActivity {
  private SwipeBackLayout mSwipeBackLayout;
  @Override
  protected void onCreate(BundlesavedInstanceState) {
      super.onCreate(savedInstanceState);
      // 可以調(diào)用該方法,設(shè)置是否允許滑動(dòng)退出
      setSwipeBackEnable(true);
      mSwipeBackLayout = getSwipeBackLayout();
      // 設(shè)置滑動(dòng)方向,可設(shè)置EDGE_LEFT, EDGE_RIGHT, EDGE_ALL, EDGE_BOTTOM
      mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);
      // 滑動(dòng)退出的效果只能從邊界滑動(dòng)才有效果,如果要擴(kuò)大touch的范圍,可以調(diào)用這個(gè)方法
      //mSwipeBackLayout.setEdgeSize(200);
  }
}

然后我們就可以寫(xiě)自己的Activity了,只要繼承自BaseActivity就可以了,為了測(cè)試一下效果我寫(xiě)了三個(gè)非常簡(jiǎn)單的Activity,在此也就不貼代碼了。到此所有工作就結(jié)束了,下面我就開(kāi)始跑程序了,效果如下圖所示:



這個(gè)時(shí)候我們可以很清楚的看到效果和我們想象的并不一樣,在向右滑動(dòng)時(shí)上一個(gè)Activity變成了黑屏,通過(guò)查閱資料得知,我們還需要在AppTheme中添加一個(gè)屬性:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

并在清單文件中設(shè)置這個(gè)Theme,然后我再跑一次程序試了一下,依舊還是出現(xiàn)上述情況,這是為什么呢?原來(lái)我們需要將主界面MainActivituy主題的windowIsTranslucent設(shè)置為false,而其他Activity設(shè)置為true,因此我又添加了一個(gè)樣式:

<style name="AppThemeMain" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="android:windowIsTranslucent">false</item>
</style>

然后在清單文件中進(jìn)行相應(yīng)的配置,測(cè)試成功,效果如圖1所示。

windowIsTranslucent屬性

程序測(cè)試完成之后我想為Activity之間的跳轉(zhuǎn)添加一些動(dòng)畫(huà),所以我又寫(xiě)了一下代碼:

<style name="anim_activity" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/activity_open_in_anim</item>
    <item name="android:activityOpenExitAnimation">@anim/activity_open_out_anim</item>
    <item name="android:activityCloseEnterAnimation">@anim/activity_close_in_anim</item>
    <item name="android:activityCloseExitAnimation">@anim/activity_close_out_anim</item>
</style>

但是我驚奇的發(fā)現(xiàn)這些動(dòng)畫(huà)竟然不起作用,幾經(jīng)波折終于找到了解決方法,解決辦法就是,windowAnimationStyle需要繼承Animation.Translucent,一般情況是繼承的Animation.Activity,這是由于windowIsTranslucent這個(gè)屬性設(shè)置為了true,然后我將代碼改為:

<style name="animation_translucent_translate" parent="@android:style/Animation.Translucent">  
    <item name="android:windowEnterAnimation">@anim/activity_open_in_anim</item>  
    <item name="android:windowExitAnimation">@anim/activity_open_out_anim</item>  
</style>

至此測(cè)試成功!
以上Demo是在Android4.4系統(tǒng)進(jìn)行測(cè)試的,后來(lái)我在5.0以上系統(tǒng)上測(cè)試發(fā)現(xiàn),不設(shè)置windowIsTranslucent屬性也是可以的,但是4.4系統(tǒng)是不行的,所以個(gè)人認(rèn)為,為了適配還是盡量按照以上做法來(lái)開(kāi)發(fā)比較好。好了,到此我的學(xué)習(xí)就結(jié)束了,還是有很多東西需要學(xué)習(xí)的啊,歡迎大家指導(dǎo)建議。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,326評(píng)論 25 708
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 7,384評(píng)論 0 17
  • 本文緣起 因?yàn)槲易龅腶pp里使用了SwipeBackHelper的開(kāi)源庫(kù)來(lái)實(shí)現(xiàn)Activity的側(cè)滑后退,本來(lái)使用...
    HolenZhou閱讀 12,153評(píng)論 22 82
  • 資產(chǎn)負(fù)債表 描述該公司在該會(huì)計(jì)年度結(jié)束的時(shí)候這家公司的資產(chǎn)和負(fù)債的狀況,一般是12月31日資產(chǎn)和負(fù)債的總和(描述是...
    逐日的我閱讀 531評(píng)論 0 2
  • 攝/一一 廟會(huì),又稱“廟市”或“節(jié)場(chǎng)”。是中國(guó)民間宗教及歲時(shí)風(fēng)俗,一般在農(nóng)歷新年、元宵節(jié)、二月會(huì)抬頭等節(jié)日舉行。也...
    一一ID閱讀 638評(píng)論 4 2

友情鏈接更多精彩內(nèi)容