欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)自定義View控件的流程詳解

 更新時間:2023年06月29日 10:05:29   作者:沐小琪吖  
這篇文章主要為大家詳細介紹了Android中實現(xiàn)自定義View控件的流程,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下

官方自定義控件流程

根據(jù)Android Developers官網(wǎng)的介紹,自定義控件需要以下步驟。(根據(jù)業(yè)務(wù)需要,某些步驟可省略)

1、創(chuàng)建View

2、處理View的布局

3、繪制View

4、與用戶進行交互

5、優(yōu)化已定義的View

上面五項就是Android官方給出的自定義控件步驟。

每個步驟里面又包括了很多細小的知識點??梢杂涀∵@五個點,并且了解每個點里包含的小知識點。再加上一些自定義控件的練習(xí)。將這些知識熟練于心,相信開發(fā)者都能夠定義出優(yōu)秀的自定義控件。接下來對上面列出的5個要點進行細化闡述。

創(chuàng)建View

1.繼承View

自定義的View是繼承于View,當(dāng)然如要自定義的View擁有某些Android已經(jīng)提供的控件功能,可直接繼承于已經(jīng)提供的控件。

2.重寫構(gòu)造方法

  • Xxx(Context context)
  • Xxx(Context context, AttributeSet attrs)
  • Xxx(Context context, AttributeSet attrs, int defStyleAttr)

3.定義自定義屬性

自定義屬性通常寫在res/values/attrs.xml文件中。聲明自定義屬性,都屬于styleable,一般styleable的name和自定義控件的類名一樣。

4.獲取自定義屬性

  • 當(dāng)在xml中創(chuàng)建一個view時,所有在xml中聲明的屬性都會被傳入到view的構(gòu)造方法中的AttributeSet類型的參數(shù)當(dāng)中。
  • 通過調(diào)用Context的obtainStyledAttributes()方法返回一個TypedArray對象。然后直接用TypedArray對象獲取自定義屬性的值。
  • TypedArray對象是共享的資源,因此在獲取完值之后必須要調(diào)用recycle()方法來回收。

測量View(Measure)

1.測量

一個View在展示時是有寬和高,測量View就是為了能夠讓自定義的控件能夠根據(jù)各種不同的情況以合適的寬高去展示。測量就必須要提到onMeasure方法。onMeasure方法是一個view確定寬高的地方。

2.重寫onMeasure的固定偽代碼寫法:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int measureWidth = measure(widthMeasureSpec, true);
    int measureHeight = measure(heightMeasureSpec, false);
    setMeasuredDimension(measureWidth, measureHeight);
}

計算出height和width之后在onMeasure中要調(diào)用setMeasuredDimension()方法。否則會出現(xiàn)運行時異常。

3.計算一些自定義控件需要的值 onSizeChange()

onSizeChange() 方法在view第一次被指定了大小值、或者view的大小發(fā)生改變時會被調(diào)用。

繪制View(Draw)

1.自定義控件被創(chuàng)建并且測量代碼寫好后,接下來就調(diào)用onDraw()來繪制View

  • onDraw方法包含一個Canvas叫做畫布的參數(shù),onDraw()簡單來說就兩點:Canvas決定要去畫什么;Paint決定怎么畫
  • Canvas提供了畫線方法,Paint就來決定線的顏色。Canvas提供了畫矩形,Paint又可以決定讓矩形是空心還是實心。

2.在onDraw方法中開始繪制之前

畫筆Paint對象信息要初始化完畢。因為View的重新繪制是比較頻繁的,可能多次調(diào)用onDraw,所以初始化的代碼不應(yīng)該放在onDraw方法里。

3.Paint畫筆

在繪圖過程中起到了極其重要的作用,畫筆主要保存顏色,樣式等繪制信息,指定如何繪制文本和圖形,畫筆對象有很多設(shè)置方法,大體上可以分為兩類,一類與圖形繪制相關(guān),一類與文本繪制相關(guān)。

4.Canvas畫布

當(dāng)調(diào)整好畫筆之后,需要繪制到畫布上,這就得用Canvas類。Canvas畫布可以繪制任何東西。還需要設(shè)置一些關(guān)于畫布的屬性,比如,畫布的顏色、尺寸等。

5.常見繪制操作有哪些

  • drawRect,drawRoundRect,繪制矩形
  • drawOval,drawCircle,drawArc:繪制橢圓,圓,以及圓弧
  • drawText:繪制文本
  • drawBitmap:繪制圖片

6.Rect和RectF介紹和區(qū)別

Rect的參數(shù)為int類型,而RectF的參數(shù)類型為float類型,從這一點上來看,RectF的精度更高一些,但是他們都是通過四個坐標(biāo)參數(shù)來確定一個矩形的區(qū)域。

與用戶進行交互

  • 某些情況自定義控件不僅只是展示漂亮的樣式,還需要支持用戶點擊,拖動操作。自定義控件就需要做用戶交互這一步。
  • 在Android系統(tǒng)中最常見的事件就是觸摸事件,會調(diào)用View的onTouchEvent(android.view.MotionEvent).重寫這個方法去處理事件邏輯。
  • 觸控有了更多的手勢,比如輕點,快速滑動等,所以在支持特殊用戶交互的時需要用到android提供的GestureDetector. 只需要實現(xiàn)GestureDetector中相對應(yīng)的接口,并且處理相應(yīng)的回調(diào)方法。
  • 除手勢之外,如果有移動之類的情況還需要讓滑動的動畫顯示得比較平滑。動畫應(yīng)該是平滑的開始和結(jié)束,而不是突然消失突然開始。建議使用屬性動畫

優(yōu)化自定義View

在上述步驟結(jié)束之后,其實一個較為完善的自定義控件已經(jīng)出來。接下來需要確保自定義控件運行得流暢,官方說法是:為了避免控件體驗遲緩,確保動畫盡可能保持每秒60幀效果。

官網(wǎng)給出的優(yōu)化建議:

  • 1、避免不必要的代碼
  • 2、在onDraw()方法中不應(yīng)該有會導(dǎo)致垃圾回收的代碼
  • 3、盡可能少讓onDraw()方法調(diào)用,大多數(shù)onDraw()方法調(diào)用都伴隨調(diào)用invalidate(),所以不是必須,不要調(diào)用invalidate()方法。

到此這篇關(guān)于Android實現(xiàn)自定義View控件的流程詳解的文章就介紹到這了,更多相關(guān)Android自定義View控件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論