Android自定義View系列 (從小白做起) 一: 初識

很多的Android入門程序猿來說對於自定義View,可能都是比較恐懼的,其實沒那麼難,寫的多了也就熟練了。 高手之路也是從小白做起的。

總結來說,自定義控件的實現有三種方式,分別是:組合控件、自繪控件和繼承控件。

我們先總結下自定義View的步驟: 1、自定義View的屬性 2、在View的構造方法中獲得我們自定義的屬性 [ 3、重寫onMesure ] 4、重寫onDraw 我把3用[]標出了,所以說3不一定是必須的,當然了大部分情況下還是需要重寫的。

目前關於實現這一塊一拉有一大堆的代碼,我們這裏對代碼直接上工程,代碼中有詳細的註釋,不懂的話可以留言詢問。實現了自定義title textView listView 三個很簡單的小demo https://github.com/AnyMarvel/CustomView

(有興趣的可以start 以後更新都在這個項目上) 首期效果圖如圖所示(是不是很醜,哈哈 將就着看吧。。。。。):

我們這裏不分析代碼,先介紹自定義View的基礎。 關鍵方法

一. LayoutInflater.inflate()的參數及其用法

1.獲取LayoutInflater對象有三種方法

LayoutInflater inflater=LayoutInflater.from(this); LayoutInflater inflater=getLayoutInflater(); LayoutInflater inflater=(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);

2.關於LayoutInflater類inflate(int resource, ViewGroup root, boolean attachToRoot)方法三個參數的含義

resource:需要加載佈局文件的id,意思是需要將這個佈局文件中加載到Activity中來操作。

root:需要附加到resource資源文件的根控件,什麼意思呢,就是inflate()會返回一個View對象,如果第三個參數attachToRoot爲true,就將這個root作爲根對象返回,否則僅僅將這個root對象的LayoutParams屬性附加到resource對象的根佈局對象上,也就是佈局文件resource的最外層的View上,比如是一個LinearLayout或者其它的Layout對象。

attachToRoot:是否將root附加到佈局文件的根視圖上

二.構造函數說明

網上有很多關於四個構造函數使用時機的說法,但是說法正確的卻沒有幾家,這裏正式的給大家科普一下:

  1. 在代碼中直接new一個Custom View實例的時候,會調用第一個構造函數.這個沒有任何爭議.
  2. 在xml佈局文件中調用Custom View的時候,會調用第二個構造函數.這個也沒有爭議.
  3. 在xml佈局文件中調用Custom View,並且Custom View標籤中還有自定義屬性時,這裏調用的還是第二個構造函數.也就是說,系統默認只會調用Custom View的前兩個構造函數,至於第三個構造函數的調用,通常是我們自己在構造函數中主動調用的(例如,在第二個構造函數中調用第三個構造函數).
  4. 只有在第三個參數defStyleAttr爲0,或者主題中沒有找到這個defStyleAttr屬性的賦值時,纔可以啓用。而且這個參數不再是Attr了,而是真正的style。其實這也是一種低級別的“默認主題”,即在主題未聲明屬性值時,我們可以主動的給一個style,使用這個構造函數定義出的View,其主題就是這個定義的defStyleRes(是一種寫死的style,因此優先級被調低)。

在View類中有四個構造函數,涉及到多個參數,

Context:上線文,這個不用多說

AttributeSet attrs: 從xml中定義的參數

int defStyleAttr :主題中優先級最高的屬性

int defStyleRes : 優先級次之的內置於View的style

在android中的屬性可以在多個地方進行賦值,涉及到的優先級排序爲:

Xml直接定義 > xml中style引用 > defStyleAttr > defStyleRes > theme直接定義

詳細介紹請移步至:http://blog.csdn.net/zhao123h/article/details/52210732

三. 工具Paint、Rect、Canvas介紹

工具是爲了讓我們更便捷的畫出我們想要的內容,這裏只做簡單的介紹,其他用法請自行百度 Canvas(畫布)類

可以用來實現各種圖形的繪製工作,如繪製直線、矩形、圓等等

1、繪製直線:canvas.drawLine();

2、繪製矩形:canvas.drawRect();

3、繪製圓形:canvas.drawCircle();

4、繪製字符:canvas.drawText();

5、繪製圖形:canvas.drawBirmap();

Paint(畫筆)類

要繪製圖形,首先得調整畫筆,按照自己的開高手之路也是從小白做起的。

發需要設置畫筆的相關屬性

1、setAntiAlias():設置畫筆的鋸齒效果

2、setColor():設置畫筆的顏色

3、setARGB():設置畫筆的A、R、G、B值

4、setAlpha():設置畫筆的Alpha值

5、setTextSize():設置字體的尺寸

6、setStyle():設置畫筆的風格(空心或實心)

7、setStrokeWidth():設置空心邊框的寬度

8、getColor():獲取畫筆的顏色

Rect(尺寸)類

設置畫布大小new Rect(int left, int top, int right, int bottom)

四. 事件傳遞機制

Android中不同的控件所具有的事件分發、攔截和響應稍有不同,主要表現在Activity本身不具有事件攔截,不是ViewGroup的最小view單元不具有事件分發和事件攔截(因爲它沒有自己的子View)。

詳細內容,請轉至:http://www.jianshu.com/p/9627997fece1

新東西的學習是枯燥無味的

這裏分享一個 阿里巴巴大嬸麼親自撰寫並推出的 熱修復原理書籍 《深入探索Android熱修復技術原理》 目前阿里在推行自己的公衆號,,下載還是有點麻煩 雙手奉上,我只是大自然的搬運工,拿走不謝~~ https://pan.baidu.com/s/1miJW8YG

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章