溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎樣自定義View

發(fā)布時間:2021-12-03 17:48:01 來源:億速云 閱讀:157 作者:小新 欄目:大數(shù)據(jù)

這篇文章給大家分享的是有關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 以后更新都在這個項目上)
首期效果圖如圖所示(是不是很丑,哈哈 將就著看吧。。。。。):

Android怎樣自定義View

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

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

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附加到布局文件的根視圖上

二.構造函數(shù)說明

Android怎樣自定義View

網(wǎng)上有很多關于四個構造函數(shù)使用時機的說法,但是說法正確的卻沒有幾家,這里正式的給大家科普一下:

  1. 在代碼中直接new一個Custom View實例的時候,會調用第一個構造函數(shù).這個沒有任何爭議.

  2. 在xml布局文件中調用Custom View的時候,會調用第二個構造函數(shù).這個也沒有爭議.

  3. 在xml布局文件中調用Custom View,并且Custom View標簽中還有自定義屬性時,這里調用的還是第二個構造函數(shù).也就是說,系統(tǒng)默認只會調用Custom View的前兩個構造函數(shù),至于第三個構造函數(shù)的調用,通常是我們自己在構造函數(shù)中主動調用的(例如,在第二個構造函數(shù)中調用第三個構造函數(shù)).

  4. 只有在第三個參數(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

三. 工具Paint、Rect、Canvas介紹

工具是為了讓我們更便捷的畫出我們想要的內容,這里只做簡單的介紹,其他用法請自行百度
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

感謝各位的閱讀!關于“Android怎樣自定義View”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI