在Demo中通過ObjectAimator實作的效果,使用一個View同樣可以實作。<br>
Demo項目位址:點選這裡
實作這個自定義View需要解決的問題:
重寫onMeasure計算自己的大小
文本繪制
圖檔加載展示為圓形
圖檔加載涉及到的優化(如大小、緩存)
動畫效果
消息出現
消息被頂上去
消息關閉
本篇文章我們先實作一條消息的基本繪制,也就是前三條(除圖檔緩存)下一篇文章中再加上動畫效果。
通知消息基本資料結構由3個部分組成:頭像、昵稱、狀态(進入/退出);
為了便于拓展,我們定義一個資料類型來儲存:
因為暫時隻實作一條消息的繪制,我們暫時用成員變量<code>mMessage</code>将資料儲存起來。
完成View的測量(onMeasure):<br>
想要測量自身大小,得要先知道自己都有什麼東西占地方,對吧。<br>頭像、昵稱、狀态(進入/退出的提示文字),這些再加上它們之間的間距。
觀察一下這個示意圖,感覺高度以提示文本的高度為基準來計算就可以了。
并且昵稱最多隻有6個字(三個點的省略号可以粗略算是一個字的寬度)
那麼每條message的高度=進出狀态文本的高度+文本上下padding。<br>
本View最多容納兩條通知,是以View的高度=兩條message的高度+它們之間的padding。<br>
View的寬度=本條message最多的字元數(我數了一下一共11個)+頭像直徑+各種padding。<br>
寬高都明确了,代碼也就好寫了:
先實作一個簡單的圖檔加載功能,可以使用開源庫來實作,我這裡寫了個簡單的http加載。
接下來就可以實作繪制方法了,繪制順序為:背景——文本——圖檔;由于消息長短看起來像是變長的(實際上在onMeasure裡已經定好了最大長度),是以要再計算一次這條message的寬度。<br>
最後增加一個添加資料的方法,一個沒有動畫效果的通知就完成了。
下篇文章我們再來實作兩條通知消息并加上動畫效果