《Android開發藝術探索》 自定義View

2021-07-10 08:28:09 字數 1378 閱讀 5100

##前言:

僅僅使用系統的控制項是不夠的,使用自定義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...