想要瞭解android自訂View,去設計和實現自己想要的View,這裡從最基礎的知識透析安卓自訂控制項實現機理。
首先我們來瞭解下做自訂View,必須知道的基礎知識:
android.graphics包是核心渲染包,它提供了一些初級圖形工具,諸如畫布、顏色過濾器、畫筆等,可以讓你直接在螢幕上進行影像處理。這個包中提供了很多類。
1、Canvas--畫板 Canvas是一個大大的畫板,這個畫板有多大,所有的View及實現的圖形都在這個Canvas上實現。Canvas類提供了三個構造方法:Public Canvas();構造一個預設無參的Canvas對象Public Canvas(Bitmap bitmap);根據一個Bitmap構造一個Canvas對象Public Canvas(GL gl);根據一個GL來構造一個對象
2、Paint--畫筆 有畫板沒有畫筆怎麼能行了,沒錯Paint就是畫筆。掌管Android王國中的所有畫筆。Paint類有三個構造方法:Public Paint()構造一個預設的Paint對象Public Paint(int flags);根據指定的flags來構造一個Paint對象,建立之後可以用setFlags()方法來更改Public Paint(Paint paint)根據指定的paint對象來構造一個Paint對象
3、Color--顏色 Color.parseColor(String str);函數這個函數太強大了,解析Alpha顏色和普通的顏色。顏色被表示為封裝的數值,這個數值由四個位元組組成,分別是:alpha、red、green、blue,這些值是非自左乘的,也就是說任何透明性只儲存在alpha部分,而不是在顏色組成部分。每一部分按照如下的順序儲存:(alpha<<24)|(red<<16)| 4、Bitmap--位元影像 這個類可以掌管天下的png和jpg圖片。我們會使用三種方法獲得Drawable檔案夾下的圖片 5、Typeface類android.graphics.Typeface
ypeface類定義字型和字型內在的類型。這個類被用在畫筆Paint設定的時候,比如用textSize,textSkewX和textScale設定來指定text在畫的時候如何來顯示和測量。Typeface提供了一些常量值來表示自身的一些屬性,比如BOLD,BOLD_ITALIC,ITALIC等 6、Path類android.graphics.PathPath類(一組地區)的描畫,類囊括多種幾何圖形比如直線線段、二次曲線、三次曲線等,調用Canvas.drawPath()方法可以將Path以所定義的paint的方式來畫到畫板上或者填出圖形,也可以用paint所指定方式來畫圖形。
7、RectF類android.graphics.RectF和Rect類android.graphics.RectRectF這個類包含一個矩形的四個單精確度浮點座標。矩形通過上下左右4個邊的座標來表示一個矩形。這些座標值屬性可以被直接存取,用width()和height()方法可以擷取矩形的寬和高。注意:大多數方法不會檢查這些座標分類是否錯誤(也就是left<=right和top<=bottom).RectF一共有四個構造方法:RectF()構造一個無參的矩形RectF(float left,float top,float right,float bottom)構造一個指定了4個參數的矩形RectF(Rect F r)根據指定的RectF對象來構造一個RectF對象(對象的左邊座標不變)RectF(Rect r)根據給定的Rect對象來構造一個RectF對象RectF提供了很多方法,下面介紹幾個方法:Public Boolean contain(RectF r);判斷一個矩形是否在此矩形內,如果在這個矩形內或者和這個矩形等價則返回true,同樣類似的方法還有public Boolean contain(float left,float top,float right,float bottom)和public Boolean contain(float x,float y)。Public void union(float x,float y)更新這個矩形,使它包含矩形自己和(x,y)這個點。RectF類提供的方法都比較簡單,容易理解,再此就不再一一贅述Android.graphics.Rect類,這個類同android.graphics.RectF很相似,不同的地方是Rect類的座標是用整形表示的,而RectF的座標是用單精確度浮點型表示的。
實現一個自訂View,需要實現以下步驟:
1,繼承View
- public class MyView extends View {
2,重寫父類View的一些方法,例如onDraw;
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
-
- /**
- * 畫最外層的大圓環
- */
- int centre = getWidth()/2; //擷取圓心的x座標
- int radius = (int) (centre - roundWidth/2); //圓環的半徑
- paint.setColor(roundColor); //設定圓環的顏色
- paint.setStyle(Paint.Style.STROKE); //設定空心
- paint.setStrokeWidth(roundWidth); //設定圓環的寬度
- paint.setAntiAlias(true); //消除鋸齒
- canvas.drawCircle(centre, centre, radius, paint); //畫出圓環
-
- Log.e("log", centre + "");
- }
-
3,根據onDraw需要到的屬性,可以自訂View屬性(values下建立attrs.xml檔案);
4,布局中或是代碼中應用自訂View,如:
5、在activity中執行個體化,修改相應屬性成功現實出設計的自訂View;