自定義view可能大家平常都會使用到,但是一般都是複製乙個別人的**,還沒有過完全自己寫的自定義view吧。自定義view一般使用在自定義進度條時會用到。自定義可以簡單理解為封裝的textview、button等都是繼承自view。
自定義view需要學習三個變數屬性;canvas(畫布)、paint(畫筆)、rect(尺寸)
可以用來實現各種圖形的繪製工作,如繪製直線、矩形、圓等等
1、繪製直線:canvas.drawline(float startx, float starty, float stopx, float stopy, paintpaint) //畫線,引數一起始點的x軸位置, 引數二起始點的y軸位置,引數三終點的x軸水平位置,引數四y軸垂直位置,最後乙個引數為paint 畫刷物件。
2、繪製矩形:canvas.drawrect(rectf rect, paint paint) //繪製區域和畫筆樣式
3、繪製圓形:canvas.drawcircle();引數一是中心點的x軸,引數二是中心點的y軸,引數三是半徑,引數四是paint物件;
4、繪製字元:canvas.drawtext(string text, float x, floaty, paint paint) //渲染文字,canvas類除了上面的還可以描繪文字,參 數一是string型別的文字,引數二x軸,引數三y軸,引數四是paint物件。
5、繪製圖形:canvas.drawbitmap(bitmap bitmap, rect src, rect dst, paint paint) //引數一就是我們常規的bitmap物件,引數 二是源區域(這裡是bitmap),引數三是目標區域(應該在canvas的位置和大小),引數四是paint畫刷物件
6、繪製圓弧:canvas.drawarc();引數一是rectf物件,乙個矩形區域橢圓形的界限用於定義在形狀、大小、電弧,引數二是起 始角(度)在電弧的開始, 引數三掃瞄角(度)開始順時針測量的,引數四是如果這是真的話,包括橢圓中心的電弧,並 關閉它,如果它是假這將是乙個弧線,引數五是paint物件;
7、繪製乙個路徑:canvas.drawpath(path path, paint paint) //引數一為path路徑物件
8、畫點:canvas.drawpoint(float x, float y, paint paint) //引數一水平x軸,引數二垂直y軸,第三個引數為paint物件。
9、畫橢圓:canvas.drawoval(rectf oval, paint paint)//引數一是掃瞄區域,引數二為paint物件;
要繪製圖形,首先得調整畫筆,按照自己的開發需要設定畫筆的相關屬性
1、setantialias(boolean aa) // 是否抗鋸齒
2、setcolor(int color) // 設定顏色,這裡android內部定義的有color類包含了一些常見顏色定義
3、setargb(int a, int r, int g, int b) // 設定 paint物件顏色,引數一為alpha透明值
4、setalpha(int a) // 設定alpha不透明度,範圍為0~255
5、settextsize(float textsize) // 設定字型大小
6、setstyle():設定畫筆的風格(空心或實心)
7、setstrokewidth():設定空心邊框的寬度
8、getcolor():獲取畫筆的顏色
9、settextscalex(float scalex) // 設定文字縮放倍數,1.0f為原始
10、setunderlinetext(booleanunderlinetext) // 設定下劃線
設定畫布大小new rect(int left, int top, int right, int bottom)
(1)新定義乙個類,繼承view,需要重新ondraw方法,在這裡就是對頁面進行重新畫圖。效果圖如下,可能不太好看。
(2)實現**:其中在**中都有詳細解釋
public class customviewactivity extends view
/** 當view的大小發生改變時,會呼叫此方法
* */
@override
protected void onsizechanged(int w, int h, int oldw, int oldh)
/** 這個方法就是自定義view的核心。繪製各種圖形
* */
@override
protected void ondraw(canvas canvas) , null, shader.tilemode.repeat); //
p.setshader(mshader);
//畫圓,橫座標、縱座標
canvas.drawcircle(120, 100, 100, p);// 大圓
//圓形進度條
barpaint.setcolor(color.red);
//設定抗鋸齒,如果不設定,載入點陣圖的時候可能會出現鋸齒狀的邊界,如果設定,邊界就會變的稍微有點模糊,鋸齒就看不到了。
barpaint.setantialias(true);
/** // style有3種型別:
// 型別1:paint.style.fillandstroke(描邊+填充)
// 型別2:paint.style.fill(只填充不描邊)
// 型別3:paint.style.stroke(只描邊不填充)
* */
barpaint.setstyle(paint.style.stroke);
//設定畫筆的粗細
barpaint.setstrokewidth(20);
//定義位置
circlebounds = new rectf(200, 200, 264, 264);
///*
* 畫弧形的大小和開始位置
* 引數一:位置
* 引數二:開始角度
* 引數三:弧形長度
* 引數4:true:則為包括圓形中心的電弧。
* 引數五:圓弧的顏色和圓弧寬度等資訊
* */
canvas.drawarc(circlebounds, progress - 90, 50, false,
barpaint);}/*
* 開啟定時器功能,實現實時重新整理頁面旋轉
* */
private handler spinhandler = new handler() else
if (progress > 360)
spinhandler.sendemptymessagedelayed(0, 0);}};
}
(3)在xml中的呼叫方式
<?xml version="1.0" encoding="utf-8"?>
public progresswheel(context context, attributeset attrs)
private void parseattributes(typedarray a)
barcolor = a.getcolor(r.styleable.progresswheel_barcolor, barcolor);
barlengt = (int) a.getdimension(r.styleable.progresswheel_barlengt,
barlengt);
textsize = (int) a.getdimension(r.styleable.progresswheel_textsize,
textsize);
textcolor = a.getcolor(r.styleable.progresswheel_textcolor,
textcolor);
//if the text is empty , so ignore it
if (a.hasvalue(r.styleable.progresswheel_text))
rimcolor = a.getcolor(r.styleable.progresswheel_rimcolor,
rimcolor);
circlecolor = a.getcolor(r.styleable.progresswheel_circlecolor,
circlecolor);
contourcolor = a.getcolor(r.styleable.progresswheel_contourcolor, contourcolor);
contoursize = a.getdimension(r.styleable.progresswheel_contoursize, contoursize);
// recycle
a.recycle();
}
Android自定義View 自定義元件
自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...
自定義view之自定義屬性
1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...
自定義view 二
自定義view的最重要的乙個部分是自定義它的外觀。根據你的程式的需求,通過ondraw方法實現繪製。在ondraw中,會傳遞給你乙個canvas。canvas封裝了繪製圖形的方法。還需要自定義乙個 paint去定義顏色樣式的填充 簡單來說 canvas定義你在螢幕上畫的圖形,而paint定義顏色,樣...