自定義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...