Android 自定義控制元件玩轉字型變色 打造炫酷ViewPager指示器

發表於2015-05-13

1、概述

本篇部落格的產生呢,是因為,群裡的哥們暖暖給我發了個效果圖,然後問我該如何實現頂部ViewPager指示器的字型變色,該效果圖是這樣的:

大概是今天頭條的app,神奇的地方就在於,切換ViewPager頁面的時候,頂部指示器改成了字型顏色的變化,個人覺得還是不錯的。

那麼核心的地方就是做一個支援字型這樣逐漸染色就可以了,我大概想了32s,掃描了一些可能實現的方案,最終定位了一個靠譜的,下面我就帶大家開始實現的征程。

實現之前貼一下我們的效果圖:

2、效果圖

1、簡單使用

效果如上圖了,關於顏失色的改變我新增了兩個方向,一個是左方向,一個是有方向。

單純的使用,可能覺得沒什麼意思,下面看結合ViewPager使用的一個例子。

2、結合ViewPager使用

可以看到我們切換頁面的時候,上面的指示器的效果,棒棒噠~~~

當然了,學會了原理,你可以擴充套件,可以做個性的進度條,可以將字型變色改為背景色變色,可以把方向改為上下,太多了,自己去摳腳想把。

3、原理

看完效果圖,有木有什麼思路~~~花幾分鐘想想,因為原理很簡單~~

我大致想了下,目測繪製半個字估計不行,那麼就在繪製範圍上下功夫,你可以全部繪製,但是我控制顯示的範圍,所以上述效果:

其實是繪製了兩遍字型,但是呢,分別控制了繪製的顯示範圍,實現了逐漸變色的效果,那麼對於範圍的控制,有什麼方便的API麼,顯然是有的

canvas有個clipRect的方法~~~ok,原理分析完畢~~

4、實現

說到實現,那第一步肯定又是自定義屬性,我們這裡的屬性,需要text,textSize,textOriginColor,textChangeColor,progress,大致看一下,應該都能看出來作用吧,看不出來沒事,結合下面的程式碼。tip:我們的View叫做ColorTrackView,感謝小七的命名。

1、自定義屬性和獲取

attr.xml

然後在我們的ColorTrackView的構造方法中進行獲取這些個渣渣屬性:

可以看到我同時貼出了成員變數,大家簡單看下就行了,都比較簡單。

獲取了屬性,初始化完成一些成員變數以後,那麼應該走向我們的measure之旅了~~

2、onMeasure

關於測量,也是比較傳統的寫法,根據傳入的widthMeasureSpec、heightMeasureSpec,利用MeasureSpec分別獲取模式和值,如何是EXACTLY萬事大吉,如果是AT_MOST、UNSPECIFIED那麼就進行自己測量需要的空間,當然了,最好注意如果是AT_MOST不應該大於父類傳入的值。

這裡提一下,如果偷懶的話,可以選擇繼承TextView,然後測量就不需要寫了,TextView預設幫你實現了,還能利用TextView的一些屬性,不過我們們這個例子比較簡單,我最終還是選擇了繼承View,繼承View有種everything under control 的感覺。

測量完成以後,不用說都是繪製了。

3、onDraw

繪製的核心就在於利用mProgress和方向去計算應該clip的範圍,具體的參考程式碼,沒什麼難點。有了範圍以後,無非就是drawText~~~

該View的完整程式碼:ColorTrackView

主要的方法介紹完畢,我們就該測試了。

5、測試

1、簡單測試

佈局檔案

注意我們的自定義屬性的名稱空間,該佈局就一個ColorTrackView,然後兩個按鈕來控制進度。

SimpleUseActivity:

這裡拿屬性動畫進行的測試,沒有匯入3.0以下相容包,有需要自己匯入。

效果圖,見上效果圖1。

2、結合ViewPager

佈局檔案:

3個ColorTrackView代表Tab,下面是ViewPager

ViewPagerUseActivity:

TabFragment

效果圖見上效果圖2。

相關文章