|
Android中,你的應(yīng)用程序程序與View類組件有著一種固定的聯(lián)系,例如按鈕(Button)、 文本框(TextView), 可編輯文本框(EditText), 列表框(ListView), 復(fù)選框(CheckBox), 單選框(RadioButton), 滾動(dòng)條(Gallery), 微調(diào)器(Spinner), 等等,還有一些比較先進(jìn)的有著特殊用途的View組件,例如 AutoCompleteTextView,ImageSwitcher和 TextSwitcher。除此之外,種類繁多的像 線性布局(LinearLayout), 框架布局(FrameLayout), 這樣的布局組件(Layout)也被認(rèn)為是View組件,他們是從View類派生過來的。 你的應(yīng)用程序就是這些控制組件和布局組件以某種方式結(jié)合顯示在屏幕上,一般來說這些組件對(duì)你來說基本夠用,但是你也應(yīng)該知道你是可以通過類繼承創(chuàng)建 屬于自己的組件,一般可以繼承像View、Layouts(布局組件)這樣的組件,甚至可以是一些比較高級(jí)的控制類組件。下面我們說一下為什么要繼承:
基本方法(The Basic Approach ) 基本方法(The Basic Approach ) 1. 讓你的類(Class)繼承一個(gè)現(xiàn)有的View 類或View的子類。 完全自定義組件(Fully Customized Components) 完全自定義組件的方法可以創(chuàng)建一些用于顯示的圖形組件(graphical components),也許是一個(gè)像電壓表的圖形計(jì)量器,或者想卡拉OK里面顯示歌詞的小球隨著音樂滾動(dòng)。無論那種方式,你也不能單純的利用組件的結(jié)合完成,無論你怎么結(jié)合這些現(xiàn)有的組件。 幸運(yùn)的是,你可以以你自己的要求輕松地創(chuàng)建完全屬于自己的組件,你會(huì)發(fā)現(xiàn)不夠用的只是你的想象力、屏幕的尺寸和處理器的性能(記住你的應(yīng)用程序最后只會(huì)在那些性能低于桌面電腦的平臺(tái)上面運(yùn)行)。 下面簡(jiǎn)單介紹如何打造完全自定義的組件: 1. 最為通用的VIEW類的父類毫無疑問是View類,因此,最開始你要?jiǎng)?chuàng)建一個(gè)基于此類的一個(gè)子類。 onDraw()和onMeasure() onDraw()函數(shù)將會(huì)傳給你一個(gè) Canvas 對(duì)象,通過它你可以在二維圖形上做任何事情,包括其他的一些標(biāo)準(zhǔn)和通用的組件、文本的格式,任何你可以想到的東西都可以通過它實(shí)現(xiàn)。 注意: 這里不包括三維圖形如果你想使用三維的圖形,你應(yīng)該把你的父類由View改為SurfaceView類,并且用一個(gè)單獨(dú)的線程??梢詤⒖糋LSurfaceViewActivity 的例子。 onMeasure() 函數(shù)有點(diǎn)棘手,因?yàn)檫@個(gè)函數(shù)是體現(xiàn)組件和容器交互的關(guān)鍵部分,onMeasure()應(yīng)該重載,讓它能夠有效而準(zhǔn)確的表現(xiàn)它所包含部分的測(cè)量值。這就有點(diǎn) 復(fù)雜了,因?yàn)槲覀儾坏紤]父類的限制(通過onMeasure()傳過來的),同時(shí)我們應(yīng)該知道一旦測(cè)量寬度和高度出來后,就要立即調(diào)用 setMeasuredDimension() 方法。 概括的來講,執(zhí)行onMeasure()函數(shù)分為一下幾個(gè)階段: 1. 重載的onMeasure()方法會(huì)被調(diào)用,高度和寬度參數(shù)同時(shí)也會(huì)涉及到(widthMeasureSpec
和heighMeasureSpec兩個(gè)參數(shù)都是整數(shù)類型),同時(shí)你應(yīng)該考慮你產(chǎn)品的尺寸限制。這里詳細(xì)的內(nèi)容可以參考
View.onMeasure(int, int) (這個(gè)連接內(nèi)容詳細(xì)的解釋了整個(gè)measurement操作)。 一個(gè)自定義組件的例子(A Customized Component Example) 在 API Demos 中的CustomView提供了以一個(gè)自定義組件的例子,這個(gè)自定義組件在 LabelView 類中定義。 LabelView例子涉及到了自定義組件的方方面面: * 首先讓自定義組件從View類中派生出來。 在例子中,你可以通過custom_view_1.xml看到自定義組件LabelView的用法。在XML文件中特別要注意的是android: 和app:兩個(gè)參數(shù)的混合運(yùn)用,app:參數(shù)表示應(yīng)用程序中被認(rèn)為是LabelView組件的個(gè)體,這些也會(huì)作為資源在R類中定義。 |
|
|