android中自定義view需要了解哪些內容

2021-07-24 20:04:05 字數 2492 閱讀 7107

這篇文章主要是對自己看過的自定義view的一些知識進行一些彙總,不會對一些api的細節進行講解,所以篇幅不會太長,主要是幫助大家對自定義view進行了解,以及學習自定義view需要從哪些地方入手。

1)現有的view滿足不了我們的需求,介面的一些元素需要我們自己去繪製。

2)現有的view可以滿足我們的需求,自定義view只是為了抽象,為這個自定義view提供若干方法,可以將我們的一些內部邏輯封裝到裡面,方便呼叫,說簡單點就是提高**的復用率。

1)我們可以實現一些系統控制項無法實現的絢麗效果,為應用增色。

2)將一些比較通用的互動效果提取成自定義view,方便復用,減少不必要的重複勞動。

3)將控制項的一些內部邏輯封裝到自定義view中,也能夠便於應用解耦,我們在使用的時候不必關心它的內部實現。

其實簡單的來分的話,自定義view我們可以分成兩大種:組合控制項和完全自定義控制項。再細分一下,我們還可以分成四種:直接繼承view,直接繼承viewgroup,繼承特定view,繼承特定viewgroup。當然分類的標準並不統一,進行分類只是幫助我們在進行自定義的時候更加明確自己的方向,所以不用糾結到底該怎麼去分類。

要想隨心所欲的去自定義view,我們首先需要了解一些基礎知識:

1)view的位置引數,即top、left、right、bottom,當然你必須也要知道view是按什麼標準來定義座標系的。

2)motionevent和touchslop

3)velocitytracker、gesturedetector和scroller

4)configuration和viewconfiguration(提供了一些標磚常量)

5)viewdraghelper(實現一些拖拽效果)

6)view、su***ceview、textureview的區別

我們可以按照這個圖大致的走一下這個流程

我們一般會在這裡面進行一些引數的初始化,比如自定義屬性,paint的一些屬性設定等等。

測量view及其子view的寬高屬性,這裡是屬性,而不僅僅是寬高的值。我們要清楚什麼時候我們需要去重寫onmeasure方法:一般是自定義的view是直接繼承view或者繼承自viewgroup。

確定view及其子view的布局位置,也就是view及其子view在父容器中的座標位置。只有在自定義viewgroup的時候需要重寫。

view的大小發生改變時,將呼叫此函式,乙個view的大小在繪製過程中可能發生改變,比如父view

view的內容繪製部分,也是實現自定義view最重要的一部分,你想實現什麼樣的效果,你就可以在系統提供給我們的canvas上面畫就行了。

上面我也說道了ondraw是自定義view最重要的一部分,在這裡你可以自由發揮你的創造力和想象力,這時你就需要了解一些細節了。

繪製圖形(點、線、矩形、橢圓、圓等)

繪製文字(文字的居中問題,需要paint知識)

畫布的基本變化(平移、縮放、旋轉、傾斜)

畫布的裁剪

畫布的儲存

顏色型別(填充、描邊)

字型大小

寬度對齊方式

文字位置屬性測量

文字寬度測量

筆鋒新增路徑

移動起點

貝塞爾(二階、三階)

邏輯運算

重置路徑

patheffect

matrix

pathmeasure

如果上面的內容你都已經掌握了,那麼你應該是可以繪製出豐富多彩的自定義view了。但是這還不夠,這就好比一幅畫,雖已具形態,但是還差點睛之筆讓它活起來。我們給自定義view duang~duang~duang新增特效自然離不開動畫,這裡強烈推薦的是屬性動畫,不要問我為什麼-_-。

objectanimator

valueanimator

animatorset

animatorlistener和animatorlisteneradapter

※插值器(interpolator)

※估值器(typeevaluator)

好了,現在我的自定義view也已經動起來了,是不是就大功告成了啊。no,還不夠,我們還需要互動啊。so,看下面

dispatchtouchevent

onintercepttouchevent

ontouchevent

ontouchlistener

onclick

onlongclick

滑動衝突

scroller

invalidate和requestlayout的傳遞(要明白兩者之間的區別)

至此,文章的內容就結束了,上面主要是基於2d層面去介紹的,假如有興趣,大家還可以研究一下opengl、camera等用法,讓你的自定義view效果看起來更絢麗。在這裡也給大家一些建議,千萬別一言不合就自定義,能夠用系統基礎的控制項去實現的盡量用系統的,因為系統自帶效率會更高一些(谷歌進行優化過了),而且自定義view需要耗費較長的時間,又不一定能保證有系統控制項的那麼高的效率。

Android自定義View 自定義元件

自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...

Android自定義View實現

android自定義view實現很簡單 繼承view或者其子類,重寫建構函式 ondraw,onmeasure 等函式,根據繼承的類的不同可能有所不同。如果自定義的view需要有自定義的屬性,需要在values下建立attrs.xml。在其中定義你的屬性。在使用到自定義view的xml布局檔案中需要...

Android 自定義View 一

android的ui介面都是由view和viewgroup及其派生類組合而成的。其中,view是所有ui元件的基類,而viewgroup是容納這些元件的容器,其本身也是從view派生出來的。androidui介面的一般結構可參見下面的示意圖 可見,作為容器的viewgroup可以包含作為葉子節點的v...