天天看點

Android技術分享| 【自習室】自定義View代替通知動畫(1)

Android技術分享| 【自習室】自定義View代替通知動畫(1)

在Demo中通過ObjectAimator實作的效果,使用一個View同樣可以實作。<br>

Demo項目位址:點選這裡

實作這個自定義View需要解決的問題:

重寫onMeasure計算自己的大小

文本繪制

圖檔加載展示為圓形

圖檔加載涉及到的優化(如大小、緩存)

動畫效果

消息出現

消息被頂上去

消息關閉

本篇文章我們先實作一條消息的基本繪制,也就是前三條(除圖檔緩存)下一篇文章中再加上動畫效果。

通知消息基本資料結構由3個部分組成:頭像、昵稱、狀态(進入/退出);

為了便于拓展,我們定義一個資料類型來儲存:

因為暫時隻實作一條消息的繪制,我們暫時用成員變量<code>mMessage</code>将資料儲存起來。

完成View的測量(onMeasure):&lt;br&gt;

想要測量自身大小,得要先知道自己都有什麼東西占地方,對吧。&lt;br&gt;頭像、昵稱、狀态(進入/退出的提示文字),這些再加上它們之間的間距。

觀察一下這個示意圖,感覺高度以提示文本的高度為基準來計算就可以了。

并且昵稱最多隻有6個字(三個點的省略号可以粗略算是一個字的寬度)

那麼每條message的高度=進出狀态文本的高度+文本上下padding。&lt;br&gt;

本View最多容納兩條通知,是以View的高度=兩條message的高度+它們之間的padding。&lt;br&gt;

View的寬度=本條message最多的字元數(我數了一下一共11個)+頭像直徑+各種padding。&lt;br&gt;

寬高都明确了,代碼也就好寫了:

先實作一個簡單的圖檔加載功能,可以使用開源庫來實作,我這裡寫了個簡單的http加載。

接下來就可以實作繪制方法了,繪制順序為:背景——文本——圖檔;由于消息長短看起來像是變長的(實際上在onMeasure裡已經定好了最大長度),是以要再計算一次這條message的寬度。&lt;br&gt;

最後增加一個添加資料的方法,一個沒有動畫效果的通知就完成了。

下篇文章我們再來實作兩條通知消息并加上動畫效果