Indicator , 滑動實(shí)現(xiàn) 放大縮小

轉(zhuǎn)載來之 鴻洋
本文由hackware投稿。
hackware的博客地址:
http://www.lxweimin.com/p/2865812fed41

上一篇博客呢,剛好也是介紹Indicator的,主要是對原理的介紹:仿今日頭條頂部導(dǎo)航指示器,本篇博客呢,作者自己開源了一個(gè)指示器,并且封裝了多種非常酷的特效。如果你剛好需要,可以試用,并給作者反饋意見。

說到 ViewPager 指示器,想必大家都不陌生,絕大部分應(yīng)用中都有這個(gè)。使用頻率非常之高。但系統(tǒng)對它的支持并不好,自帶的 PagerTabStrip 和 PagerTitleStrip 太弱,很難滿足需求。

因此往往程序中需要用到指示器的時(shí)候,大家基本上都是選擇自己寫。當(dāng)然也有第三方框架諸如 Jake Wharton 大神的 ViewPagerIndicator 等,我曾經(jīng)嘗試著用它們,但還是被它們的可定制能力給嚇退了。

所以我自行編寫了一個(gè)庫,效果圖如下:

1

背景

近期交互改版,需要在指示器上增加吸附效果(類似上圖第7個(gè)),剛開始我有點(diǎn)懵逼,因?yàn)橹暗闹甘酒髦皇呛唵蔚氖褂昧?HorizontalScrollView + 橫向 LinearLayout ,向 LinearLayout 里面添加一些 TextView 當(dāng)做標(biāo)題,選中的時(shí)候只是簡單的改變 TextView 的顏色,沒有任何動畫,因此實(shí)現(xiàn)起來相對簡單(項(xiàng)目前期時(shí)間緊迫)。這估計(jì)也是大部分應(yīng)用的做法吧。

考慮到后面如果交互再改版,那我又會懵逼了,所以干脆自己來打造一個(gè)可擴(kuò)展、可定制能力 很強(qiáng) 真TM強(qiáng) 的 ViewPager 指示器框架 MagicIndicator :

https://github.com/hackware1993/MagicIndicator

之所以叫 MagicIndicator,是因?yàn)?鴻神 之前搞了一個(gè) MagicViewPager, 我覺得這兩個(gè)可以很好的搭配使用,并且正如大家看到的,它確實(shí)比較 Magic。

2

如何使用

這期就不打算給大家講原理性文章了,只講如何集成(主要是這兩天都在寫這個(gè),被媳婦罵慘了,沒時(shí)間寫了),后面我會有一個(gè)系列的文章來講這個(gè),涉及到的內(nèi)容大概有:

MagicIndicator 原理

如何擴(kuò)展 MagicIndicator 打造任意的切換效果

如何使用 MagicIndicator 來打造主流應(yīng)用(諸如微信主頁的切換)的指示器效果

好,我們開始。

首先,你需要從我的 Github 上將工程代碼 check 下來,直接導(dǎo)入即可運(yùn)行,里面包含源碼和 demo。工程中有個(gè) Module 叫做 magicindicator,直接拷到你的項(xiàng)目中即可。

包結(jié)構(gòu)如下:

不要忘了添加依賴哦:

dependencies { compile project(':magicindicator')}

導(dǎo)入成功后,就可以使用啦。
你需要先在布局文件里引入 MagicIndicator:

再在代碼里面找到它,并進(jìn)行簡單設(shè)置:

這樣,你就可以輕松的實(shí)現(xiàn)效果圖中 今日頭條 式(效果圖中第一個(gè))切換效果。

額,上面這代碼明顯沒有和 ViewPager 相關(guān)聯(lián),因此滑動 ViewPager 時(shí)是看不到切換效果的,我們給 ViewPager 添加一個(gè)監(jiān)聽器:

這樣, MagicIndicator 就算成功引入項(xiàng)目啦。

注意,以上代碼明顯沒有和 ViewPager 強(qiáng)關(guān)聯(lián),因此在不使用 ViewPager 的情況下,仍然可以使用 MagicIndicator。只是需要你手動調(diào)用 onPageXXX 系列方法回調(diào)即可。當(dāng)然,后續(xù)我會提供幫助類來簡化這個(gè)過程。

等 MagicIndicator 基本穩(wěn)定、成型后,我會把它提交到 MavenCenter 和 JCenter 中,方便大家使用。

3

內(nèi)建指示器

MagicIndicator 目前內(nèi)建了好幾種指示器,基本可以滿足絕大部分需求,并且每一種指示器都支持通過 插值器(Interpolator) 來微調(diào)效果(如果你還不會 巧用插值器,可以參考我的前一篇博文 Android水波紋特效的簡單實(shí)現(xiàn) ),后面我還會不定期的往里面添加更多炫酷的效果,敬請期待。下面演示一下使用內(nèi)建的指示器實(shí)現(xiàn)效果圖中的 小尖角式切換效果:


看到?jīng)]有,如果你想換一個(gè)效果,只需在 getItemView 里返回不同的指示器標(biāo)題(IPagerTitleView),在 getIndicator 里返回不同的指示器(IPagerIndicator)就可以啦。

4

如何擴(kuò)展

當(dāng)內(nèi)建的指示器不能滿足你的需求時(shí),你可以輕易的擴(kuò)展,如果你的需求貌似可以使用 HorizontalScrollView + 橫向 LinearLayout 方式實(shí)現(xiàn),建議繼承 IPagerTitleView和 IPagerIndicator 即可,如果不行,那就完全自定義吧,繼承 IPagerNavigator (導(dǎo)航器 —— 我覺得上面的那些效果本質(zhì)是一個(gè)導(dǎo)航器,指示器只是包含在導(dǎo)航器中的一個(gè)元素而已) 吧。

效果圖中的最后一個(gè)效果就是如此:

當(dāng)然,我可不希望每當(dāng)內(nèi)置指示器達(dá)不到你的需求時(shí),你總是去繼承這些個(gè)類,為了簡化,我在最新的代碼里增加了 CommonPagerTitleView,使用方法如下:


效果圖如下:

關(guān)于擴(kuò)展 MagicIndicator,后面會有詳細(xì)的博文來講解,敬請留意。如果你擴(kuò)展 MagicIndicator 實(shí)現(xiàn)了很炫酷的指示器效果,歡迎共享出來。

5

更多

MagicIndicator 同樣考慮到了 ViewPager 內(nèi)容變化的情況,當(dāng)你的 ViewPager 內(nèi)容發(fā)生變化時(shí),除了調(diào)用 PagerAdapter.notifyDataSetChanged ,還記得先調(diào)用 IPagerNavigator.notifyDataSetChanged 哦:

恩,大家如果有興趣可以學(xué)習(xí)其源碼或者使用,發(fā)現(xiàn)問題,可以給作者留言。此外,這是本公眾號推送的第一篇介紹作者個(gè)人開源項(xiàng)目類的文章,當(dāng)然我也收到很多類似的文章,多數(shù)我都拒絕了,本篇主要是因?yàn)樽髡咴o大家?guī)砹硕嗥夹g(shù)性文章,大家可以支持支持。

以后會考慮將這類文章放到副刊或者僅在技術(shù)類文章后做簡單推薦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,004評論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,003評論 2 374

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