一 簡介
Space-Navigation-View是Android底部導航欄的開源控件卧抗,可以很方便的實現(xiàn)Google Space應用的底部導航欄效果。如下圖:
二 源碼分析
2.1 整體布局
SpaceNavigationView繼承RelativeLayout笆制,在onMeasure寫死了寬為match_parent,高為72dp溶褪,背景透明入问。布局中控件的添加是在initAndAddViewsToMainView方法中,如下圖:
initAndAddViewsToMainView主要是添加這三個布局蒂破,配置了這些布局的參數(shù)馏谨,整個布
局組成如下圖:
centreBackgroundView和centreContent就是繪制中間圓形按鈕和曲線的。
mainContent分為左右兩個部分附迷,并且中間空白了centreContent惧互。
2.2 BezierView
BezierView就是中間不規(guī)則部分,繼承RelativeLayout喇伯,中間按鈕是FAB喊儡。這些并不重要,重要的是曲線的實現(xiàn)稻据,采用貝塞爾曲線繪制管宵。代碼如下:
cubicTo()繪制三階貝塞爾曲線,需要兩個控制點。
不了解貝塞爾曲線的可以看看醫(yī)生的這篇文章:貝塞爾曲線開發(fā)的藝術(shù)
3.3 Badge顯示和隱藏
Badge可以用來顯示消息的個數(shù)箩朴,布局如下:
在添加布局的時候岗喉,用了一個List保存這些Badge,并提供了showBadgeAtIndex(int itemIndex, int badgeText, @ColorInt int badgeColor)來控制Badge的顯示炸庞。當調(diào)用showBadgeAtIndex顯示時钱床,設置背景為圓形,個數(shù)和顏色就是傳過來的值埠居。設置圓形背景如下:
三 總結(jié)
整個項目的封裝并不復雜查牌,實現(xiàn)效果還是不錯的。分析這個項目實現(xiàn)的意義滥壕,在于封裝控件的思路纸颜,可以進行借鑒。實際項目中绎橘,對一些常用的控件可以自己進行一些封裝胁孙,便于使用。另外称鳞,這個是貝塞爾曲線的一個小小應用涮较。