自定義View-第十三步:xml標(biāo)簽:shape庭呜、selector、layerlist

前言

根據(jù)啟艦 的博客所學(xué)習(xí)的自定義View犀忱。

一募谎、shape講解

利用代碼繪制出背景效果,可以定義填充色阴汇、描邊数冬、圓角、漸變等
1. 使用方法
在res/drawable文件夾下搀庶,新建一個(gè)文件拐纱,命名為xx.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <corners android:radius="3dp" />
    <padding
        android:left="3dp"
        android:right="3dp"
        android:top="2dp"
        android:bottom="2dp"/>
    <stroke
        android:width="1px"
        android:color="@color/xhc_red" />
</shape>

調(diào)用的時(shí)候,一般這樣:

  android:background="@drawable/xx"

2. 具體講解(corners地来、gradient戳玫、padding、size未斑、solid咕宿、stroke)

  1. Corners
<corners    //定義圓角    
    android:radius="dimension"    //全部的圓角半徑,與其它四個(gè)并不能共同使用
    android:topLeftRadius="dimension"   //左上角的圓角半徑    
    android:topRightRadius="dimension"  //右上角的圓角半徑    
    android:bottomLeftRadius="dimension"    //左下角的圓角半徑    
    android:bottomRightRadius="dimension" />    //右下角的圓角半徑   
  1. solid和stroke
<solid  //指定內(nèi)部填充色
 android:color="color" />    
<stroke        //描邊屬性 
    android:width="dimension"   //描邊的寬度    
    android:color="color"   //描邊的顏色    
    // 以下兩個(gè)屬性設(shè)置虛線    
    android:dashWidth="dimension"   //虛線的寬度,值為0時(shí)是實(shí)線    
    android:dashGap="dimension" />      //虛線的間隔   
  1. size和padding
<size    //定義圖形的大小
  android:width="dimension"    
  android:height="dimension" />  
<padding     //定義內(nèi)部邊距
    android:left="dimension"    
    android:top="dimension"    
    android:right="dimension"    
    android:bottom="dimension" />  

舉個(gè)栗子??

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"
        android:topLeftRadius="20dp"
        android:topRightRadius="2dp"/>
    <solid
        android:color="@color/colorPrimary"/>
    //藍(lán)色
    <stroke
        android:width="1dp"
        android:color="@color/colorAccent"/>
    //紅色
    <padding
        android:bottom="3dp"
        android:left="5dp"
        android:right="5dp"
        android:top="3dp"/>
    <size
        android:width="160dp"/>
</shape>
   <TextView
       android:layout_centerInParent="true"
       android:textColor="#fff"
       android:gravity="center"
       android:text="shape demo"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:background="@drawable/shapedemo"
       />

效果如下:


  1. gradient
<gradient   
    android:type=["linear" | "radial" | "sweep"]    //共有3中漸變類型蜡秽,線性漸變(默認(rèn))/放射漸變/掃描式漸變    
    android:angle="integer"     //漸變角度府阀,必須為45的倍數(shù),0為從左到右芽突,90為從上到下    试浙,只對(duì)線性漸變linear有效
    android:centerX="float"     //漸變中心X的相對(duì)位置,范圍為0~1    
    android:centerY="float"     //漸變中心Y的相對(duì)位置寞蚌,范圍為0~1    
    android:startColor="color"   //漸變開始點(diǎn)的顏色    
    android:centerColor="color"  //漸變中間點(diǎn)的顏色田巴,在開始與結(jié)束點(diǎn)之間    
    android:endColor="color"    //漸變結(jié)束點(diǎn)的顏色    
    android:gradientRadius="float"  //漸變的半徑钠糊,只有當(dāng)漸變放射類型radial時(shí)才能使用    
引用自http://blog.csdn.net/harvic880925/article/details/41850723

舉個(gè)栗子??

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"
        android:topLeftRadius="20dp"
        android:topRightRadius="2dp"/>
    <padding
        android:bottom="3dp"
        android:left="5dp"
        android:right="5dp"
        android:top="3dp"/>
    <size
        android:height="160dp"
        android:width="160dp"/>

    <gradient
        android:type="sweep"
        android:startColor="#ff0000"
        android:centerColor="#00ff00"
        android:endColor="#0000ff"
        android:centerX="0.2"
        android:centerY="0.8"/>
</shape>

效果圖:

3. Shape的屬性(rectangle、oval壹哺、line抄伍、ring)

android:shape=["rectangle" | "oval" | "line" | "ring"]    
//shape的形狀,默認(rèn)為矩形管宵,可以設(shè)置為矩形(rectangle)截珍、橢圓形(oval)、線性形狀(line)箩朴、環(huán)形(ring)    

//下面的屬性只有在android:shape="ring"時(shí)可用:    
android:innerRadius      //   尺寸岗喉,內(nèi)環(huán)的半徑。    
android:innerRadiusRatio  //  浮點(diǎn)型炸庞,以環(huán)的寬度比率來表示內(nèi)環(huán)的半徑钱床,    
android:thickness           //尺寸,環(huán)的厚度    
android:thicknessRatio     // 浮點(diǎn)型埠居,以環(huán)的寬度比率來表示環(huán)的厚度诞丽,例如,如果android:thicknessRatio="2", 那么環(huán)的厚度就等于環(huán)的寬度除以2拐格。這個(gè)值是可以被android:thickness覆蓋的,默認(rèn)值是3.    
android:useLevel         //   boolean值刑赶,如果當(dāng)做是LevelListDrawable使用時(shí)值為true捏浊,否則為false.   一般設(shè)為false。

舉個(gè)栗子:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="ring"
       android:innerRadius="10dp"
       android:thickness="50dp"
       android:useLevel="false">
<!--(這里一定要要加上useLevel屬性并定義為false撞叨,不然沒有效果)-->
    <solid android:color="#ff00ff"/>
    <size
        android:width="160dp"
        android:height="110dp" />
</shape>
效果圖

二金踪、selector講解

用于定義在用戶不同的動(dòng)作狀態(tài)下,使用不同的背景值

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"] //如果這里設(shè)置成true就相當(dāng)于居中牵敷,如果不設(shè)置或者設(shè)置為false就是拉伸
    android:dither=["true" | "false"]//抖動(dòng)效果
    android:variablePadding=["true" | "false"] >//可變的填充,默認(rèn)值為false胡岔,一般建議設(shè)置為false就行。 
    <item
        android:drawable="@[package:]drawable/drawable_resource"http:// 設(shè)置圖標(biāo)或者drawable
 android:state_pressed=["true" | "false"]//是否被按下
 android:state_checked=["true" | "false"]  //是否已勾選
 android:state_checkable=["true" | "false"] //是否可勾選
 android:state_selected=["true" | "false"] // 是否被選中
 android:state_enabled=["true" | "false"]      // 是否可用
 android:state_focused=["true" | "false"]     // 是否已獲得焦點(diǎn)
 android:state_active=["true" | "false"]   //是否激活
 android:state_window_focused=["true" | "false"]   //窗口是否獲得焦點(diǎn)
 android:state_first=["true" | "false"]  //是否處于開始狀態(tài)
 android:state_last=["true" | "false"]     //是否處于結(jié)束狀態(tài)
 android:state_hovered=["true" | "false"] //光標(biāo)是否停留在View的自身大小范圍內(nèi)的狀態(tài)
</selector>

系統(tǒng)在selector尋找符合要求的item時(shí)是按照代碼的順序從上向下遍歷的枷餐,一旦發(fā)現(xiàn)符合狀態(tài)的item就直接使用它靶瘸,并停止繼續(xù)尋找!如果把這些狀態(tài)理解成集合的話毛肋,那么位于下面的集合一定不要是上面某個(gè)集合的子集怨咪,否則是不會(huì)輪到下面這個(gè)集合出場(chǎng)的。

selector用法舉例

<?xml version="1.0" encoding="utf-8"?>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
<item   
android:state_pressed="true"  
android:drawable="@drawable/picture1" />
<item  
android:drawable="@drawable/picture2"/>  //不能但在最上邊哦润匙,不然會(huì)失效的
</selector>  

效果:
1.在按壓狀態(tài)下展示picture1這種圖片诗眨;
2.在默認(rèn)狀態(tài)下展示picture2這種圖片;

三、layerlist講解

主要作用就是將多個(gè)圖層按照順序疊起來孕讳,做為一個(gè)背景圖來顯示匠楚。
1. layerlist用法舉例

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

   <item
       android:drawable="@mipmap/bear"
       />

   <!--left等四個(gè)偏移量和控件的margin設(shè)置差不多巍膘,都是外間距的效果。
   如果不設(shè)置偏移量芋簿,前面的圖層就完全擋住了后面的圖層峡懈,從而也看不到后面的圖層效果了。 -->
   <item
       android:bottom="2dp"
       android:left="2dp"
       android:right="2dp"
       android:top="2dp">
       <shape>
           <corners android:radius="25dp"/>
           <solid android:color="#00ff00"/>
       </shape>
   </item>

   <item
       android:bottom="5dp"
       android:left="5dp"
       android:right="5dp"
       android:top="5dp">
       <selector>
           <item android:state_pressed="true"
               >
               <shape>
                   <corners android:radius="25dp"/>
                   <solid android:color="#FF0000"/>
               </shape>
           </item>
           <item
               >
               <shape>
                   <corners android:radius="25dp"/>
                   <solid android:color="#FFFFFF"
                       />
               </shape>
           </item>
       </selector>
   </item>

</layer-list>
   <TextView
       android:clickable="true"
       android:layout_centerInParent="true"
       android:textColor="#fff"
       android:gravity="center"
       android:text="shape demo"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:background="@drawable/shapedemo"
       />

效果:


參考網(wǎng)址

Android中的Selector使用詳解
Android開發(fā)中的drawable文件:shape益咬、layer-list和selector標(biāo)簽

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逮诲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子幽告,更是在濱河造成了極大的恐慌梅鹦,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冗锁,死亡現(xiàn)場(chǎng)離奇詭異齐唆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冻河,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門箍邮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叨叙,你說我怎么就攤上這事锭弊。” “怎么了擂错?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵味滞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我钮呀,道長(zhǎng)剑鞍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任爽醋,我火速辦了婚禮蚁署,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚂四。我一直安慰自己光戈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布遂赠。 她就那樣靜靜地躺著田度,像睡著了一般。 火紅的嫁衣襯著肌膚如雪解愤。 梳的紋絲不亂的頭發(fā)上镇饺,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音送讲,去河邊找鬼奸笤。 笑死惋啃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的监右。 我是一名探鬼主播边灭,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼健盒!你這毒婦竟也來了绒瘦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤扣癣,失蹤者是張志新(化名)和其女友劉穎惰帽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體父虑,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡该酗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了士嚎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呜魄。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖莱衩,靈堂內(nèi)的尸體忽然破棺而出爵嗅,到底是詐尸還是另有隱情,我是刑警寧澤笨蚁,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布操骡,位于F島的核電站,受9級(jí)特大地震影響赚窃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岔激,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一勒极、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虑鼎,春花似錦辱匿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至江兢,卻和暖如春昨忆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杉允。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工邑贴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留席里,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓拢驾,卻偏偏與公主長(zhǎng)得像奖磁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子繁疤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,288評(píng)論 25 707
  • 概述 今天我們來探究一下android的樣式咖为。其實(shí),幾乎所有的控件都可以使用 background屬性去引用自定義...
    CokeNello閱讀 4,848評(píng)論 1 19
  • 1.Shape通過Shape可以在xml中繪制各種形狀在res/drawable文件夾下褐啡,新建一個(gè)文件:shape...
    瘋子一般的勇士閱讀 1,154評(píng)論 0 2
  • 記得剛開始學(xué)Android時(shí),看著自己完全用系統(tǒng)控件寫出的不忍直視的界面鳖昌,對(duì)于如何做出不一樣的按鈕备畦,讓它們?cè)诓煌瑺?..
    biloba閱讀 1,717評(píng)論 1 11
  • 前文,看到技術(shù)美文,忍不住想拿出來分享.下面是原文地址 點(diǎn)擊原文地址 Objective-C被夾在了兩個(gè)世界中間 ...
    指尖猿閱讀 551評(píng)論 0 1