高仿Android QQ菜單,左側(cè)抽屜,底部導(dǎo)航

實(shí)現(xiàn)這種效果的方式有很多,在不使用第三方包的前提下,這里用V4包原生DrawerLayout+FragmentTabHost控件實(shí)現(xiàn), 先來(lái)張效果圖:

QQNavigation.gif

實(shí)現(xiàn)這種效果的技術(shù)點(diǎn):

  • DrawerLayout拖動(dòng)菜單時(shí)主內(nèi)容布局不會(huì)跟著移動(dòng)
  • DrawerLayout拖動(dòng)時(shí)很生硬,是直接拖出來(lái)的
  • FragmentTabHost自定義底部Tab布局
  • 解決FragmentTabHost切換時(shí),主布局Fragment會(huì)重走生命周期的問(wèn)題

好吧,你可能不知道我在說(shuō)什么, 一個(gè)一個(gè)來(lái):

1. DrawerLayout拖動(dòng)菜單時(shí)主內(nèi)容布局不會(huì)跟著移動(dòng)

你可能見(jiàn)到的DrawerLayout的使用效果是這樣的,這是Google Play上的DrawerLayout,當(dāng)手指?jìng)?cè)滑時(shí),左側(cè)抽屜菜單會(huì)覆蓋中間布局,中間布局不會(huì)隨手指拖動(dòng)而移動(dòng)

Google Play.gif

解決這個(gè)問(wèn)題很簡(jiǎn)單, 在DrawerLayout的監(jiān)聽(tīng)事件onDrawerSlide回調(diào)中對(duì)其進(jìn)行操作,slideOffset是滑動(dòng)的偏移值:會(huì)在0~1之間變化:

Paste_Image.png

2. DrawerLayout拖動(dòng)時(shí)很生硬,是直接拖出來(lái)的

DrawerLayout菜單拖出來(lái)時(shí),默認(rèn)最先展示到屏幕上的是菜單布局的邊緣位置,而QQ的側(cè)滑菜單最先展示在屏幕上的是菜單布局中間偏右的位置,目測(cè)大概是黃金分割點(diǎn),如圖:

Paste_Image.png

解決這個(gè)問(wèn)題也不難, 動(dòng)態(tài)修改菜單布局的PadingLeft,在菜單滑出的過(guò)程中,PadingLeft從菜單寬度的(1-0.618)倍,動(dòng)態(tài)減少到0方可實(shí)現(xiàn)這種效果:

Paste_Image.png

3. FragmentTabHost自定義底部Tab布局

第一次聽(tīng)說(shuō)FragmentTabHost可以用來(lái)做導(dǎo)航之后,就去找資料,官方文檔還給了示例代碼https://developer.android.google.cn/reference/android/support/v4/app/FragmentTabHost.html
當(dāng)我跑上這段代碼之后完全高興不起來(lái),太TM難看了,底部Tab就幾個(gè)文字,然后就去查API,果然有了新的發(fā)現(xiàn):

Paste_Image.png

4. 解決FragmentTabHost切換時(shí),主布局Fragment會(huì)重走生命周期的問(wèn)題

當(dāng)切換底部的Tab時(shí),主布局中的三個(gè)Fragment會(huì)重走生命周期,也就意味著頁(yè)面的數(shù)據(jù)又得重新加載,這對(duì)用戶(hù)體驗(yàn)都不是個(gè)好消息,解決的辦法就是重寫(xiě)FragmentTabHost,其實(shí)就是改了原控件的幾個(gè)方法:

重寫(xiě)前是這樣的:


Paste_Image.png

重寫(xiě)后是這樣的:


代碼就是在原有控件的基礎(chǔ)上改了三行:

Paste_Image.png
Paste_Image.png

好了,原本不那么看好的控件經(jīng)過(guò)改造,已經(jīng)丑小鴨變成天鵝了.
代碼鏈接:https://github.com/Shib90/QQNavigationDemo-master

當(dāng)然這個(gè)只是模仿拿來(lái)練手,還存在很多問(wèn)題:

  • status bar顏色
  • 底部消息數(shù)背景圖不一樣,并且沒(méi)有拖拽動(dòng)畫(huà)
  • ...

or maybe,是為你準(zhǔn)備的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鉴裹,隨后出現(xiàn)的幾起案子痛侍,更是在濱河造成了極大的恐慌,老刑警劉巖宪彩,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件休讳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尿孔,警方通過(guò)查閱死者的電腦和手機(jī)俊柔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)活合,“玉大人雏婶,你說(shuō)我怎么就攤上這事“字福” “怎么了留晚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)告嘲。 經(jīng)常有香客問(wèn)我倔丈,道長(zhǎng),這世上最難降的妖魔是什么状蜗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任需五,我火速辦了婚禮,結(jié)果婚禮上轧坎,老公的妹妹穿的比我還像新娘宏邮。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蜜氨。 她就那樣靜靜地躺著械筛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪飒炎。 梳的紋絲不亂的頭發(fā)上埋哟,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音郎汪,去河邊找鬼赤赊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛煞赢,可吹牛的內(nèi)容都是我干的抛计。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼照筑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吹截!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凝危,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤波俄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蛾默,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體弟断,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年趴生,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阀趴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苍匆,死狀恐怖刘急,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浸踩,我是刑警寧澤叔汁,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站检碗,受9級(jí)特大地震影響据块,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜折剃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一另假、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怕犁,春花似錦边篮、人聲如沸己莺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凌受。三九已至,卻和暖如春思杯,著一層夾襖步出監(jiān)牢的瞬間胜蛉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工色乾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留誊册,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓杈湾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親攘须。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漆撞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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