這篇文章給大家分享的是有關(guān)Android怎樣自定義View的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
成都創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元孝義做網(wǎng)站,已為上家服務(wù),為孝義各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
自定義控件的實(shí)現(xiàn)有三種方式,分別是:組合控件、自繪控件和繼承控件。
我們先總結(jié)下自定義View的步驟:
1、自定義View的屬性
2、在View的構(gòu)造方法中獲得我們自定義的屬性
[ 3、重寫onMesure ]
4、重寫onDraw
我把3用[]標(biāo)出了,所以說(shuō)3不一定是必須的,當(dāng)然了大部分情況下還是需要重寫的。
目前關(guān)于實(shí)現(xiàn)這一塊一拉有一大堆的代碼,我們這里對(duì)代碼直接上工程,代碼中有詳細(xì)的注釋,不懂的話可以留言詢問(wèn)。實(shí)現(xiàn)了自定義title textView listView 三個(gè)很簡(jiǎn)單的小demo
https://github.com/AnyMarvel/CustomView
(有興趣的可以start 以后更新都在這個(gè)項(xiàng)目上)
首期效果圖如圖所示(是不是很丑,哈哈 將就著看吧。。。。。):
我們這里不分析代碼,先介紹自定義View的基礎(chǔ)。
關(guān)鍵方法
1.獲取LayoutInflater對(duì)象有三種方法
LayoutInflater inflater=LayoutInflater.from(this);
LayoutInflater inflater=getLayoutInflater();
LayoutInflater inflater=(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
2.關(guān)于LayoutInflater類inflate(int resource, ViewGroup root, boolean attachToRoot)方法三個(gè)參數(shù)的含義
resource:需要加載布局文件的id,意思是需要將這個(gè)布局文件中加載到Activity中來(lái)操作。
root:需要附加到resource資源文件的根控件,什么意思呢,就是inflate()會(huì)返回一個(gè)View對(duì)象,如果第三個(gè)參數(shù)attachToRoot為true,就將這個(gè)root作為根對(duì)象返回,否則僅僅將這個(gè)root對(duì)象的LayoutParams屬性附加到resource對(duì)象的根布局對(duì)象上,也就是布局文件resource的最外層的View上,比如是一個(gè)LinearLayout或者其它的Layout對(duì)象。
attachToRoot:是否將root附加到布局文件的根視圖上
網(wǎng)上有很多關(guān)于四個(gè)構(gòu)造函數(shù)使用時(shí)機(jī)的說(shuō)法,但是說(shuō)法正確的卻沒(méi)有幾家,這里正式的給大家科普一下:
在代碼中直接new一個(gè)Custom View實(shí)例的時(shí)候,會(huì)調(diào)用第一個(gè)構(gòu)造函數(shù).這個(gè)沒(méi)有任何爭(zhēng)議.
在xml布局文件中調(diào)用Custom View的時(shí)候,會(huì)調(diào)用第二個(gè)構(gòu)造函數(shù).這個(gè)也沒(méi)有爭(zhēng)議.
在xml布局文件中調(diào)用Custom View,并且Custom View標(biāo)簽中還有自定義屬性時(shí),這里調(diào)用的還是第二個(gè)構(gòu)造函數(shù).也就是說(shuō),系統(tǒng)默認(rèn)只會(huì)調(diào)用Custom View的前兩個(gè)構(gòu)造函數(shù),至于第三個(gè)構(gòu)造函數(shù)的調(diào)用,通常是我們自己在構(gòu)造函數(shù)中主動(dòng)調(diào)用的(例如,在第二個(gè)構(gòu)造函數(shù)中調(diào)用第三個(gè)構(gòu)造函數(shù)).
只有在第三個(gè)參數(shù)defStyleAttr為0,或者主題中沒(méi)有找到這個(gè)defStyleAttr屬性的賦值時(shí),才可以啟用。而且這個(gè)參數(shù)不再是Attr了,而是真正的style。其實(shí)這也是一種低級(jí)別的“默認(rèn)主題”,即在主題未聲明屬性值時(shí),我們可以主動(dòng)的給一個(gè)style,使用這個(gè)構(gòu)造函數(shù)定義出的View,其主題就是這個(gè)定義的defStyleRes(是一種寫死的style,因此優(yōu)先級(jí)被調(diào)低)。
在View類中有四個(gè)構(gòu)造函數(shù),涉及到多個(gè)參數(shù),
Context:上線文,這個(gè)不用多說(shuō)
AttributeSet attrs: 從xml中定義的參數(shù)
int defStyleAttr :主題中優(yōu)先級(jí)最高的屬性
int defStyleRes : 優(yōu)先級(jí)次之的內(nèi)置于View的style
在android中的屬性可以在多個(gè)地方進(jìn)行賦值,涉及到的優(yōu)先級(jí)排序?yàn)椋?/p>
Xml直接定義 > xml中style引用 > defStyleAttr > defStyleRes > theme直接定義
詳細(xì)介紹請(qǐng)移步至:http://blog.csdn.net/zhao123h/article/details/52210732
工具是為了讓我們更便捷的畫出我們想要的內(nèi)容,這里只做簡(jiǎn)單的介紹,其他用法請(qǐng)自行百度
Canvas(畫布)類
可以用來(lái)實(shí)現(xiàn)各種圖形的繪制工作,如繪制直線、矩形、圓等等
1、繪制直線:canvas.drawLine();
2、繪制矩形:canvas.drawRect();
3、繪制圓形:canvas.drawCircle();
4、繪制字符:canvas.drawText();
5、繪制圖形:canvas.drawBirmap();
Paint(畫筆)類
要繪制圖形,首先得調(diào)整畫筆,按照自己的開高手之路也是從小白做起的。
發(fā)需要設(shè)置畫筆的相關(guān)屬性
1、setAntiAlias():設(shè)置畫筆的鋸齒效果
2、setColor():設(shè)置畫筆的顏色
3、setARGB():設(shè)置畫筆的A、R、G、B值
4、setAlpha():設(shè)置畫筆的Alpha值
5、setTextSize():設(shè)置字體的尺寸
6、setStyle():設(shè)置畫筆的風(fēng)格(空心或?qū)嵭模?/p>
7、setStrokeWidth():設(shè)置空心邊框的寬度
8、getColor():獲取畫筆的顏色
Rect(尺寸)類
設(shè)置畫布大小new Rect(int left, int top, int right, int bottom)
Android中不同的控件所具有的事件分發(fā)、攔截和響應(yīng)稍有不同,主要表現(xiàn)在Activity本身不具有事件攔截,不是ViewGroup的最小view單元不具有事件分發(fā)和事件攔截(因?yàn)樗鼪](méi)有自己的子View)。
感謝各位的閱讀!關(guān)于“Android怎樣自定義View”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)頁(yè)名稱:Android怎樣自定義View
瀏覽地址:http://jinyejixie.com/article48/ggedhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站營(yíng)銷、動(dòng)態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航、域名注冊(cè)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)