##前言:
僅僅使用系統的控制項是不夠的,使用自定義view可以實現更棒的效果。
自定義view是乙個綜合的技術體系。設計view的層次結構,時間分發機制和view的工作原理等技術細節,所以自定義初學者當然會覺得自定義view比較難(認同!!!)。
所以將從一定的高度來理解自定義view,通過現象看本質,避免陷入只見樹木不見森林的狀態。
##1. 分類:
繼承view從寫ondraw()方法
採用這種方式需要自己支援wrap_content,並且padding也需要自己處理。
繼承viewgroup派生特殊的layout
當效果看起來很像集中view組合在一起的時候,可以採用這種方法來實現。
繼承特定的view
一般用於擴充套件某種已有的view的功能。比如繼承textview進行增強等。
繼承特定的viewgroup
比如繼承linearlayout進行增強等,或者繼承relativelayout寫組合控制項。
##2. 自定義view注意事項:
讓view支援wrap_content
直接繼承view或viewgroup的控制項,如果不支援wrap_content,則該控制項的表現效果和match_parent一樣。
如果有必要,支援padding
直接繼承view的控制項,不在draw()方法中處理padding,則padding屬性失效。繼承viewgroup的控制項必須要在onmeasure()和onlayout()中考慮padding和margin,否則這兩屬性失效。
盡量不要在view中使用handler
view本身就提供了post系列方法,完全可以替代handler。除非很明確地要使用handler。
view中如果有執行緒或動畫,需要及時停止
在view.ondetachedfromwindow()
中停止。如果不及時處理,會造成記憶體溢位。當包含此view的activity退出或者此view被remove()時,就會呼叫該方法。
view帶有滑動巢狀情形時,需要處理好滑動衝突
##3. 獲取view的寬高
在onwindowfocuschanged()中獲取,但可能被頻繁呼叫
view.post(runnable)中獲取,加入到訊息佇列尾部
使用viewtreeobserver
Android 開發藝術探索筆記(14)
android動畫可以分為三種 view動畫,幀動畫和屬性動畫。view動畫 view動畫作用於view,它支援四種動畫效果,分別是平移 縮放 旋轉和透明度。幀動畫也屬於view動畫,但是其表現形式和上面四種變換效果不太一樣。view的四種變換效果對應著animation的四個子類 translat...
Android 開發藝術探索筆記(16)
插值器和估值器 timeinterpolator中文翻譯為時間插值器,它的作用是根據時間流逝的百分比來計算出當前屬性改變的百分比。系統預置了一些插值器 線性插值器,加減速插值器等 typeevaluator的中文翻譯為型別估值演算法,也叫估值器,它的作用是根據當前屬性改變的百分比來計算改變後的屬性值...
Android 開發藝術探索 IPC機制
2.1 2.2.1 android 開啟程序方式只有android proces 特殊方式通過jni native fork乙個程序 android proces remote 私有程序,其他應用和元件不能和他跑乙個程序 android proces com.test 全域性程序,具有相同share...