《Android APP可以有的東西》之功能篇:右滑返回

前言

右滑返回這個功能好像在iOS上蠻實用的,因為它的返回鍵在左上角丧慈,右手握持手機(jī)就得穿越整個屏幕去按它,不過對于大屏Android手機(jī)也是蠻實用的,右下角的返回鍵隨著屏占比的增大按起來的難度也不小啡莉,就算有mBack這樣的交互,多一個右滑返回也是極好的是吧旨剥?

上代碼 SwipBackDemo

上效果圖

我是圖

SlidingPaneLayout

這個東西是Support V4中早就存在的咧欣,同樣是側(cè)滑,遠(yuǎn)沒有側(cè)滑菜單android.support.v4.widget.DrawerLayout被熟知轨帜,這玩意兒13年就有了...那時候我大概還在玩泥巴...

SlidingPaneLayout繼承自GroupView魄咕,官方的貌似是作為側(cè)滑菜單推出的,然鵝并沒有多少人使用蚌父?哮兰?但是可以根據(jù)這東西實現(xiàn)右滑返回。

原理:假設(shè)滑動的時候左側(cè)有側(cè)滑菜單苟弛,但是它是全透明的喝滞,所以可以看到底部一層的視圖,然后拉出整個假設(shè)的側(cè)滑菜單之后移除當(dāng)前activity膏秫,就完成了右滑返回右遭。

所以這個地方要定義的是滑動的anim,以及透明的style.主要是這個style:

<style name="Animation.SlidingBack" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
        <item name="android:activityOpenExitAnimation">@anim/slide_out_right</item>
        <item name="android:activityCloseEnterAnimation">@anim/slide_in_right</item>
        <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
        <item name="android:wallpaperOpenEnterAnimation">@anim/slide_in_right</item>
        <item name="android:wallpaperOpenExitAnimation">@anim/slide_out_right</item>
        <item name="android:wallpaperCloseEnterAnimation">@anim/slide_in_right</item>
        <item name="android:wallpaperCloseExitAnimation">@anim/slide_out_right</item>
        <item name="android:wallpaperIntraOpenEnterAnimation">@anim/slide_in_right</item>
        <item name="android:wallpaperIntraOpenExitAnimation">@anim/slide_out_right</item>
        <item name="android:wallpaperIntraCloseEnterAnimation">@anim/slide_in_right</item>
        <item name="android:wallpaperIntraCloseExitAnimation">@anim/slide_out_right</item>
    </style>

代碼思路:實例化出slidingPaneLayout及相關(guān)屬性設(shè)定荔睹,然后給slidingPaneLayout添加透明的側(cè)滑視圖和真實的內(nèi)容區(qū)域視圖狸演,關(guān)鍵代碼:

 SlidingPaneLayout slidingPaneLayout = new SlidingPaneLayout(this);
            //通過反射改變mOverhangSize的值為0,這個mOverhangSize值為菜單到右邊屏幕的最短距離僻他,默認(rèn)是32dp宵距,現(xiàn)在給它改成0
            try {
                //屬性
                Field f_overHang = SlidingPaneLayout.class.getDeclaredField("mOverhangSize");
                f_overHang.setAccessible(true);
                f_overHang.set(slidingPaneLayout, 0);
            } catch (Exception e) {
                e.printStackTrace();
            }
            slidingPaneLayout.setPanelSlideListener(this);
            slidingPaneLayout.setSliderFadeColor(getResources().getColor(android.R.color.transparent));

            View leftView = new View(this);
            leftView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            slidingPaneLayout.addView(leftView, 0);

            ViewGroup decor = (ViewGroup) getWindow().getDecorView();
            ViewGroup decorChild = (ViewGroup) decor.getChildAt(0);
            decorChild.setBackgroundColor(getResources().getColor(android.R.color.white));
            decor.removeView(decorChild);
            decor.addView(slidingPaneLayout);
            slidingPaneLayout.addView(decorChild, 1);

可以在一個基類中封裝使用以上方法,然后需要返回的繼承該類就行了吨拗。因為某些界面不需要側(cè)滑返回满哪,所以提供一個設(shè)置是否支持返回的方法,不需要返回的重寫該方法返回false:

@Override
    protected boolean isSupportSwipeBack() {
        return false;
    }

上代碼 SwipBackDemo

最后

這個是全屏滑動劝篷,所以我嘗試了一些方法來讓它只在邊緣滑動哨鸭,但是我失敗了...所以如果有上文這種需求的話可以直接使用,解決跟listview和scrollview的滑動沖突的時候去重新判斷onInterceptTouchEvent方法就行的娇妓,但是如果有邊緣滑動的話還是嘗試用SlidingMenu吧...

最后求助一下看到本文的大神看看有什么好的方案咯~

【功能篇】擴(kuò)展閱讀

《Android APP應(yīng)該有的東西》之功能篇:版本檢測更新

《Android APP應(yīng)該有的東西》之功能篇:熱修復(fù)

《Android APP可能有的東西》之功能篇:新功能高亮指引【薦】


簡書地址:簡書主頁像鸡,專注技術(shù)類
轉(zhuǎn)載請注明出處,蟹蟹!
-------我的夢想真的是做一條咸魚哈恰!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末只估,一起剝皮案震驚了整個濱河市志群,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛔钙,老刑警劉巖锌云,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吁脱,居然都是意外死亡桑涎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門兼贡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攻冷,“玉大人,你說我怎么就攤上這事紧显〗采溃” “怎么了缕棵?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵孵班,是天一觀的道長。 經(jīng)常有香客問我招驴,道長篙程,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任别厘,我火速辦了婚禮虱饿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘触趴。我一直安慰自己氮发,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布冗懦。 她就那樣靜靜地躺著爽冕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪披蕉。 梳的紋絲不亂的頭發(fā)上颈畸,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音没讲,去河邊找鬼眯娱。 笑死,一個胖子當(dāng)著我的面吹牛爬凑,可吹牛的內(nèi)容都是我干的徙缴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嘁信,長吁一口氣:“原來是場噩夢啊……” “哼于样!你這毒婦竟也來了迁霎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤百宇,失蹤者是張志新(化名)和其女友劉穎考廉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體携御,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡昌粤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了啄刹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涮坐。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖誓军,靈堂內(nèi)的尸體忽然破棺而出袱讹,到底是詐尸還是另有隱情,我是刑警寧澤昵时,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布捷雕,位于F島的核電站,受9級特大地震影響壹甥,放射性物質(zhì)發(fā)生泄漏救巷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一句柠、第九天 我趴在偏房一處隱蔽的房頂上張望浦译。 院中可真熱鬧,春花似錦溯职、人聲如沸精盅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叹俏。三九已至,卻和暖如春甚带,著一層夾襖步出監(jiān)牢的瞬間她肯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工鹰贵, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留晴氨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓碉输,卻偏偏與公主長得像籽前,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,280評論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,791評論 22 665
  • 昨日玫瑰已采兩朵 今日三朵玫瑰 1.早起 2.發(fā)通知 3.閱讀 【幸福實修99天目標(biāo)】 1.臣服父母 2.為自己植...
    葉青丁當(dāng)媽閱讀 225評論 0 2
  • 昨天又體罰學(xué)生枝哄,曾經(jīng)多次發(fā)誓不打?qū)W生肄梨,但這一切都是空話。因為我的耳邊總是縈繞著必須體罰挠锥,再加上學(xué)生不聽話众羡,我就情不...
    雅風(fēng)嘟嘟閱讀 281評論 0 0
  • 無論是電視劇還是電影,中國影視最不足的便是題材的選擇蓖租。如今電影題材都是大眾化主流化粱侣,一點也看不到新穎獨到之處,這與...
    真的心閱讀 809評論 0 0