您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Android怎樣自定義View的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
自定義控件的實現(xiàn)有三種方式,分別是:組合控件、自繪控件和繼承控件。
我們先總結下自定義View的步驟:
1、自定義View的屬性
2、在View的構造方法中獲得我們自定義的屬性
[ 3、重寫onMesure ]
4、重寫onDraw
我把3用[]標出了,所以說3不一定是必須的,當然了大部分情況下還是需要重寫的。
目前關于實現(xiàn)這一塊一拉有一大堆的代碼,我們這里對代碼直接上工程,代碼中有詳細的注釋,不懂的話可以留言詢問。實現(xiàn)了自定義title textView listView 三個很簡單的小demo
https://github.com/AnyMarvel/CustomView
(有興趣的可以start 以后更新都在這個項目上)
首期效果圖如圖所示(是不是很丑,哈哈 將就著看吧。。。。。):
我們這里不分析代碼,先介紹自定義View的基礎。
關鍵方法
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)方法三個參數(shù)的含義
resource:需要加載布局文件的id,意思是需要將這個布局文件中加載到Activity中來操作。
root:需要附加到resource資源文件的根控件,什么意思呢,就是inflate()會返回一個View對象,如果第三個參數(shù)attachToRoot為true,就將這個root作為根對象返回,否則僅僅將這個root對象的LayoutParams屬性附加到resource對象的根布局對象上,也就是布局文件resource的最外層的View上,比如是一個LinearLayout或者其它的Layout對象。
attachToRoot:是否將root附加到布局文件的根視圖上
網(wǎng)上有很多關于四個構造函數(shù)使用時機的說法,但是說法正確的卻沒有幾家,這里正式的給大家科普一下:
在代碼中直接new一個Custom View實例的時候,會調用第一個構造函數(shù).這個沒有任何爭議.
在xml布局文件中調用Custom View的時候,會調用第二個構造函數(shù).這個也沒有爭議.
在xml布局文件中調用Custom View,并且Custom View標簽中還有自定義屬性時,這里調用的還是第二個構造函數(shù).也就是說,系統(tǒng)默認只會調用Custom View的前兩個構造函數(shù),至于第三個構造函數(shù)的調用,通常是我們自己在構造函數(shù)中主動調用的(例如,在第二個構造函數(shù)中調用第三個構造函數(shù)).
只有在第三個參數(shù)defStyleAttr為0,或者主題中沒有找到這個defStyleAttr屬性的賦值時,才可以啟用。而且這個參數(shù)不再是Attr了,而是真正的style。其實這也是一種低級別的“默認主題”,即在主題未聲明屬性值時,我們可以主動的給一個style,使用這個構造函數(shù)定義出的View,其主題就是這個定義的defStyleRes(是一種寫死的style,因此優(yōu)先級被調低)。
在View類中有四個構造函數(shù),涉及到多個參數(shù),
Context:上線文,這個不用多說
AttributeSet attrs: 從xml中定義的參數(shù)
int defStyleAttr :主題中優(yōu)先級最高的屬性
int defStyleRes : 優(yōu)先級次之的內置于View的style
在android中的屬性可以在多個地方進行賦值,涉及到的優(yōu)先級排序為:
Xml直接定義 > xml中style引用 > defStyleAttr > defStyleRes > theme直接定義
詳細介紹請移步至:http://blog.csdn.net/zhao123h/article/details/52210732
工具是為了讓我們更便捷的畫出我們想要的內容,這里只做簡單的介紹,其他用法請自行百度
Canvas(畫布)類
可以用來實現(xiàn)各種圖形的繪制工作,如繪制直線、矩形、圓等等
1、繪制直線:canvas.drawLine();
2、繪制矩形:canvas.drawRect();
3、繪制圓形:canvas.drawCircle();
4、繪制字符:canvas.drawText();
5、繪制圖形:canvas.drawBirmap();
Paint(畫筆)類
要繪制圖形,首先得調整畫筆,按照自己的開高手之路也是從小白做起的。
發(fā)需要設置畫筆的相關屬性
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中不同的控件所具有的事件分發(fā)、攔截和響應稍有不同,主要表現(xiàn)在Activity本身不具有事件攔截,不是ViewGroup的最小view單元不具有事件分發(fā)和事件攔截(因為它沒有自己的子View)。
感謝各位的閱讀!關于“Android怎樣自定義View”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。