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

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

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

官方自定義控件流程

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

1、創(chuàng)建View

2、處理View的布局

3、繪制View

4、與用戶進(jìn)行交互

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

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

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

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

測量View(Measure)

1.測量

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

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

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

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

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

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

繪制View(Draw)

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

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

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

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

3.Paint畫筆

在繪圖過程中起到了極其重要的作用,畫筆主要保存顏色,樣式等繪制信息,指定如何繪制文本和圖形,畫筆對(duì)象有很多設(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類型,從這一點(diǎn)上來看,RectF的精度更高一些,但是他們都是通過四個(gè)坐標(biāo)參數(shù)來確定一個(gè)矩形的區(qū)域。

與用戶進(jìn)行交互

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

優(yōu)化自定義View

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

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

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

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

相關(guān)文章

最新評(píng)論