自定義view 二

2021-07-10 11:57:43 字數 1849 閱讀 2175

自定義view的最重要的乙個部分是自定義它的外觀。根據你的程式的需求,通過ondraw方法實現繪製。

在ondraw中,會傳遞給你乙個canvas。

canvas封裝了繪製圖形的方法。

還需要自定義乙個 paint去定義顏色樣式的填充

簡單來說:canvas定義你在螢幕上畫的圖形,而paint定義顏色,樣式,字型。

view在重新繪製的時候會呼叫ondraw方法。盡量避免在ondraw初始化大量的paint。這裡將初始化放在構造方法中的init中進行。原因是ondraw方法會經常被呼叫。大量初始化會導致螢幕卡頓。

初始化paint**:

private void init() else

mpiepaint = new paint(paint.anti_alias_flag);

mpiepaint.setstyle(paint.style.fill);

mpiepaint.settextsize(mtextheight);

mshadowpaint = new paint(0);

mshadowpaint.setcolor(0xff101010);

mshadowpaint.setmaskfilter(new blurmaskfilter(8, blurmaskfilter.blur.normal));

自定義view的布局可以通過兩種方法

如果不是經常需要改變view的大小,可以重寫的方法onsizechanged()).

比如在你動態調整gridview的時候,就可以用到該方法。

如果你想更加精確的控制你的view的大小,需要重寫onmeasure())方法。

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)

注意事項:

1.widthmeasurespec和heightmeasurespec有三種模式。需要根據不同的模式做相應的處理這裡新建了個 resolvesizeandstate()用來處理不同模式view返回的大小。

2.計算view大小需要把padding考慮進去。

3.onmeasure()沒有返回值。它通過呼叫setmeasureddimension()來獲取結果。重寫onmeasure()方法必須被呼叫。在ondraw中呼叫canvas物件中的方法繪製需要的形狀。

1.繪製文字使用drawtext()。指定字型通過呼叫settypeface(), 通過setcolor()來設定文字顏色.

2.繪製基本圖形使用drawrect(), drawoval(), drawarc(). 通過setstyle()來指定形狀是否需要filled, outlined.

3.繪製一些複雜的圖形,使用path類. 通過給path物件新增直線與曲線, 然後使用drawpath()來繪製圖形. 和基本圖形一樣,paths也可以通過setstyle來設定是outlined, filled, both.

4.通過建立lineargradient物件來定義漸變。呼叫setshader()來使用lineargradient。

5.通過使用drawbitmap來繪製.

protected void ondraw(canvas canvas)

// draw the pointer

canvas.drawline(mtextx, mpointery, mpointerx, mpointery, mtextpaint);

canvas.drawcircle(mpointerx, mpointery, mpointersize, mtextpaint);

自定義樣式View 二 自定義Button

android中自帶的 button 樣式比較醜,為了美化 button 可使用一下方法。實現效果如下 自定義 button 實現效果 1.自定義button 背景選擇器 2.自定義buton 素材 3.自定義button 背景 我們不是牛逼的程式設計師,我們只是程式開發中的墊腳石。我們不傳送紅包,...

Android 自定義View 二

自定義view首先要實現乙個繼承自view的類。新增類的構造方法,override父類的方法,如ondraw,onmeasure 等。如果自定義的view有自己的屬性,需要在values下建立attrs.xml檔案,在其中定義屬性,同時 也要做修改。乙個簡單的例子,畫一條豎直線 public cla...

Android自定義View 自定義元件

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