編輯:關於Android編程
Android中提供了各種類型的Drawable,也可以用XML定義各種Drawable。本文重點講述如何用XML中的shape節點定義GradientDrawable。
用XML定義的drawable文件放在res/drawable目錄下。
用XML文件定義GradientDrawable的語法如下所示:
該文件以
為根結點,其shape
屬性可取四種值:rectangle、oval、line或ring。以上語法格式中雖然列出了很多屬性,但是並不是對於所有類型的shape都支持這些屬性。下面分別對這四種shape進行講解。
在res/drawable下面用XML文件定義了一個名為rectangle的GradientDrawable,其對應的shape值為rectangle,表明我們定義的drawable的形狀是矩形。在layout文件中定義了一個TextView,其使用了上述drawable,如下所示:
solid
rectangle.xml定義如下所示:
在上面的XML文件中,我們將shape屬性設置為rectangle
,我們將
節點的color屬性設置為綠色,
屬性是用來設置面的填充色的,效果如下所示:
corners 效果如下所示: 只有當 padding XML文件如下所示: 效果如下所示: size 定義的ImageView如下所示: 對應的drawable定義如下所示: 效果如下所示: stroke 對應的XML文件如下所示: 效果如下所示: gradient linear 我們將startColor設置為紅色,endColor設置為藍色,效果如下所示: 我們還可以設置centerColor屬性,指定中間色,XML如下所示: 我們將中間色設置為綠色,效果如下所示: 默認情況下,漸變是從左向右進行的,如果想調整漸變的方向可以設置 我們將angle設置為90度,那麼漸變方向就變成了從下上,效果如下所示: radial 我們將startColor設置為紅色,效果如下所示: 由上圖我們可以發現,startColor(紅色)從中心沿著圓的半徑逐漸變淡。 在設置了startColor的基礎上,我們還可以設置centerColor,XML如下所示: 效果如下圖所示: 由上圖可以看出,startColor(紅色)從中心沿著圓的半徑逐漸漸變到centerColor(綠色)。 除了設置startColor、centerColor,還可以設置endColor,XML如下所示: 我們將centerColor設置為綠色,效果如下所示: 其實,startColor、centerColor、endColor這三個屬性可以任意組合,大家可以自己嘗試一下各種組合的效果。 默認圓心的位置處於drawable的中心,我們可以通過centerX和centerY屬性改變漸變圓心的位置,centerX和centerY的取值范圍都是0到1,這兩個屬性的默認值都是0.5,drawable的左上角的centerX和centerY的值都是0,右下角的centerX和centerY的值都是1。我們改變centerX和centerY的值,XML如下所示: 效果如下所示: sweep 我們將startColor設置為紅色,效果如下所示: 我們也可以只設置endColor,XML文件如下所示: 將endColor設置為藍色,效果如下所示: 我們也可以只設置centerColor的值,XML文件如下所示: 將centerColor設置為綠色,效果如下所示: 我們也可以同時設置startColor、centerColor、endColor的值,XML文件如下所示: 將startColor、centerColor、endColor分別設置為紅、綠、藍,效果如下所示: centerX和centerY的默認值都是0.5,表示中心點的默認位置就是drawable的中心,我們也可以更改centerX和centerY的值,從而更新中心點的位置,XML文件如下所示: 我們將centerX的值設置為0.25,效果如下所示: 在res/drawable下面用XML文件定義了一個名為oval的GradientDrawable,其對應的shape值為oval,表示drawable的形狀是橢圓,並將該drawable作為TextView的background。oval和rectangle的主要區別就是drawable的形狀不同,大部分的節點屬性的作用是相同的。 solid 效果如下所示: corners padding size stroke gradient linear radial sweep 在res/drawable下面用XML文件定義了一個名為line的GradientDrawable,其對應的shape值為line,並將該drawable作為TextView的background。當shape為line時,表示drawable的形狀是線,該線會分割drawable。line只支持 XML文件如下所示: 效果如下所示: 在res/drawable下面用XML文件定義了一個名為ring的GradientDrawable,其對應的shape值為ring,表示drawable的形狀是圓環,並將該drawable作為TextView的background。所謂圓環就是大圓套小圓。當shape為ring時,shape有額外的四個屬性可用:innerRadius、thickness、innerRadiusRatio、thicknessRatio。 需要特別注意的是,在API<=19的真機上使用shape為ring的drawable時,Android有個bug,會不顯示drawable,解決辦法是將shape設置useLevel屬性為true。 我們通過innerRadius指定小圓的半徑,通過thickness指定大圓和小圓之間的寬度。XML如下所示: 效果如下所示: 我們還可以通過innerRadiusRatio指定小圓的半徑,innerRadiusRatio的值是float類型,如果其值是9,表示小圓的半徑等於TextView寬度的1/9。同樣,也可以通過thicknessRatio指定大圓和小圓之間的寬度,其值類型也是float,如果值為8,則表示大小圓之間的寬度等於TextView的1/8。XML文件如下所示: 效果如下所示: 如果給ring設置了 ring同樣支持 type為linear時,只將centerColor設置為綠色,效果如下所示: type為linear時,只將endColor設置為藍色,效果如下所示: type為linear時, 當 當type為sweep時,表示顏色是圍繞中心點360度順時針旋轉的,起點就是3點鐘位置。我們將startColor、centerColor、endColor分別設置為紅、綠、藍,效果如下所示: 希望本文對大家用Shape定義GradientDrawable有所幫助!
shape
屬性值為rectangle
時,
節點才會有用。
節點的radius
屬性同時定義了四個角的半徑,如果想讓這四個角的半徑不一樣,可以分別設置topLeftRadius、topRightRadius、bottomLeftRadius和bottomRightRadius屬性,不過在設置這四個屬性之前應先設置radius
屬性作為默認值,且默認值要大於1,無法正常使用其他四個屬性。
節點用於設置drawable的padding,可以分別設置left、right、top、bottom四個屬性,其作用與直接對TextView設置的四個paddingLeft、paddingRight、paddingTop、paddingBottom屬性等價。
可以用
節點的width和height屬性設置drawable的尺寸。默認情況下,用
定義的drawable會自動縮放到包含drawable的View尺寸范圍。比如我們有如下的ImageView的src設置了
定義的drawable,當我們設置了其scaleType
值為center時,
中定義的size尺寸就會限制drawable縮放。
可以用
節點設置drawable的輪廓線,通過width
屬性設置輪廓線的寬度,通過color
屬性設置輪廓線的顏色。默認情況下,
定義的是實線,除此之外,還可以設置dashWidth
和dashGap
屬性,如果設置了這兩個屬性,那麼就是虛線。其中,dashWidth
定義了每個虛線段的長度,dashGap
定義了兩個虛線段之間的距離。
上面我們說到,通過
可以設置drawable的顏色,但是只是一種純色,如果想讓drawable產生漸變效果,可以使用
節點創建漸變色效果。
節點具有以下屬性:type、startColor、centerColor、endColor、angle、centerX、centerY、gradientRadius。其中type有三種取值:linear、radial和sweep,默認值是linear。當type取不同的值時,
並不是支持全部屬性,下面詳細說明。
當
的type值為linear時,表示顏色是線性漸變的,此時支持startColor、centerColor、endColor、angle這四個屬性,其他屬性不支持。我們可以通過設置startColor和endColor指定漸變的起始顏色以及終止顏色,XML如下所示:
angle
屬性,angle的默認值為0,對應著自左向右漸變,angle的單位是角度,angle的值必須是45的倍數,否則不會有漸變效果。我們可以更改angle值,XML如下所示:
當
的type值為radial時,表示顏色從某點向周圍輻射漸變,此時支持除angle之外的其他所有屬性。我們必須通過設置gradientRadius屬性以指定漸變的輻射半徑,通過startColor指定起始顏色,XML如下所示:
由上圖可以看出,startColor(紅色)從中心沿著圓的半徑逐漸漸變到centerColor(綠色),在指定的半徑之外顏色用endColor(藍色)填充。
當
的type值為sweep時,表示顏色是圍繞中心點360度順時針旋轉的,起點就是3點鐘位置。
我們可以只設置startColor,XML文件如下所示:
oval
如同rectangle,我們可以通過solid指定drawable的顏色,XML如下所示:
當shape為oval時,不支持
節點。
oval同樣支弛喎?/kf/yidong/wp/" target="_blank" class="keylink">WPGNvZGU+PHBhZGRpbmc+PC9wYWRkaW5nPjwvY29kZT692rXjo6y9q8vEuPZwYWRkaW5n1rXJ6NbDzqoyMGRwo6zQp7n7yOfPwsv5yr6jujxiciAvPg0KPGltZyBhbHQ9"這裡寫圖片描述" src="/uploadfile/Collfiles/20160104/2016010409124296.png" title="\" />
oval不支持
節點。
同rectangle一樣,我們也可以為oval設定
,效果如下所示:
oval同樣支持
節點實現漸變效果,type屬性也是支持linear、radial、sweep三個屬性。
節點實現的漸變效果桶rectangle的漸變效果基本一樣。
當type為linear時,實現線性漸變效果,我們將startColor、centerColor、endColor分別設置為紅、綠、藍,並設置angle為45度,效果如下所示:
當type為radial時,實現放射漸變效果,我們將startColor、centerColor、endColor分別設置為紅、綠、藍,效果如下所示:
當type為sweep時,表示顏色是圍繞中心點360度順時針旋轉的,起點就是3點鐘位置。我們將startColor、centerColor、endColor分別設置為紅、綠、藍,效果如下所示:
節點中的多個參數組合的效果可以參見上述rectangle中的說明。
line
和
兩個節點,不支持其他的節點。
ring
,那麼大小圓都會使用該設置的輪廓線,效果如下所示:
實現漸變效果,默認type為linear,只將startColor設置為紅色,效果如下所示:
也支持angle參數。大家可以自己嘗試多種顏色的組合效果。
的type值設置為gradial時,需要指定gradientRadius屬性,否則會報錯。gradial並不能像上面那樣實現輻射漸變效果,gradial的ring只是用startColor填充圓環的顏色,實現的效果與指定
節點中的color屬性相同,此處就不貼圖了。
樂視pro3支持NFC嗎? 根據樂視官方介紹,樂視pro3支持全功能NFC,支持讀卡、寫卡、卡模擬及P2P模式等豐富應用。用戶使用樂視pro3可以完成公交
1.只push odex 到手機手機無法運行解決:修改dalvik/vm/analysis/DexPrepare.cpp中的dvmCheckOptHeade
JSON的定義: 一種輕量級的數據交換格式,具有良好的可讀和便於快速編寫的特性。業內主流技術為其提供了完整的解決方案(有點類似於正則表達式 ,獲得了當今大部分語言的支持)
榮耀6plus有著紅外遙控功能,相信入手榮耀6plus的同學都很想試試自己的手機當遙控是什麼感覺吧。華為榮耀6plus不僅僅是手機,不僅可以做智能手機,下載