使用Android自帶屬性實(shí)現(xiàn)基本的控件展示效果

開發(fā)項目中瞻坝,經(jīng)常需要用到實(shí)線蛛壳,虛線杏瞻,漸變線條,方角按鈕衙荐,圓角按鈕捞挥,漸變按鈕,疊加圖片等效果忧吟。最初的時候砌函,我主要是通過普通圖片和.9圖來實(shí)現(xiàn)不同的圖片背景和線條效果的,實(shí)現(xiàn)出來的效果也是蠻不錯的溜族。
但是后來發(fā)現(xiàn)這樣不太合適讹俊,一是不夠靈活;二是要在項目中存放大量的圖片資源煌抒,極大的增加了App的大腥耘;三是發(fā)現(xiàn)使用Androd自帶的屬性就可以實(shí)現(xiàn)大多數(shù)我們需要的效果寡壮,既然Android自帶的東西可以實(shí)現(xiàn)這樣效果贩疙,為什么不用呢?
于是乎况既,抽時間整理了一下和Shape这溅,gradient,Selector棒仍,layer_list相關(guān)的屬性芍躏,做了個小demo,寫篇技術(shù)短文降狠,讓自己進(jìn)一步鞏固這些基礎(chǔ)以及方便日后查閱对竣。

首先展示一下整個demo的效果圖(具體實(shí)現(xiàn)代碼文章結(jié)尾給出)

GIF.gif

一、shape簡介
我們使用shape可以很方便的在xml文件中實(shí)現(xiàn)各種常用的幾何形狀

  • 效果圖:
    shape.png
  • shape的常見取值:
<shape>  Android:shape=["rectangle" | "oval" | "line" | "ring"] </shape>
*其中rectagle矩形榜配,oval橢圓否纬,line水平直線,ring環(huán)形*
  • <shape>子節(jié)點(diǎn)的常用屬性:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 圓角 整型-->
    <corners
        android:radius="9dp"  
        android:topLeftRadius="2dp"  
        android:topRightRadius="2dp" 
        android:bottomLeftRadius="2dp" 
        android:bottomRightRadius="2dp"  />
    
    <!-- 漸變   angle必須為45的整數(shù)倍蛋褥,且type類型必須是linear-->
    <gradient
        android:startColor="@android:color/white"   起始顏色
        android:centerColor="@android:color/black"  中間顏色
        android:endColor="@android:color/black"     結(jié)束顏色
        android:useLevel="false"  ["true" | "false"] 如果要使用LevelListDrawable對象临燃,就要設(shè)置為true。設(shè)置為true無漸變烙心,false有漸變色
        android:angle="45"  漸變角度膜廊,0從左到右,90表示從下到上淫茵,數(shù)值必須為45的整數(shù)倍爪瓜,默認(rèn)為0,此時type類型必須是linear
        android:type="radial" linear(線性變化匙瘪,默認(rèn)是這個),radial(輻射漸變)以及sweep(掃描漸變)
        android:centerX="0"  整型铆铆,漸變中心X點(diǎn)坐標(biāo)的相對位置
        android:centerY="0"  整型蝶缀,漸變中心Y點(diǎn)坐標(biāo)的相對位置
        android:gradientRadius="90"  這個表示漸變的半徑,當(dāng)type=radial類型的時候才需要使用
 />
    
    <!-- 各方向的間隔 -->
    <padding
        android:left="2dp"
        android:top="2dp"
        android:right="2dp"
        android:bottom="2dp"/>
    
    <!-- 寬高大小 -->
    <size
        android:width="50dp"
        android:height="50dp"/><!-- 寬度和高度 -->
    
    <!-- 填充的顏色 -->
    <solid
        android:color="@android:color/white"/>
    
    <!-- 描邊 -->
    <stroke
        android:width="2dp"
        android:color="@android:color/black"
        android:dashWidth="1dp"  整型 表示'-'橫線的寬度薄货, 值為0時翁都,表示為實(shí)線。值大于0則為虛線谅猾。
        android:dashGap="2dp"    整型 表示'-'橫線之間的距離柄慰,虛線之間的間隔 即“ - - - - ”
     -->
/>
</shape>

二、selector簡介
在程序開發(fā)中我們使用selector來做組件的背景税娜,這樣我們就可以不需要使用代碼來控制組件在不同狀態(tài)下不同背景和顏色的變化先煎,可以簡化很多邏輯代碼,使用非常方便巧涧。

  • 效果圖:
    selector.gif
  • Selector的分類:
    selector其實(shí)就是許多不同狀態(tài)的列表集合體(StateList)薯蝎, 它主要分為兩類:Color-Selector 和Drawable-Selector
  • Color-Selector:
    color-selector ,顧名思義就是顏色狀態(tài)列表谤绳,可以跟color一樣使用占锯,顏色會隨著組件的狀態(tài)而改變,color-selector資源文件一般存儲于/res/color/filename_selector.xml里面
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"   顏色值缩筛,#RGB,$ARGB,#RRGGBB,#AARRGGBB
        android:state_pressed=["true" | "false"]        是否觸摸
        android:state_focused=["true" | "false"]        是否獲得焦點(diǎn)
        android:state_selected=["true" | "false"]       是否被狀態(tài)
        android:state_checkable=["true" | "false"]      是否可選
        android:state_checked=["true" | "false"]        是否選中
        android:state_enabled=["true" | "false"]        是否可用
        android:state_window_focused=["true" | "false"] 是否窗口聚焦
    /> 
</selector>
  • Drawable-Selector:

drawable-selector 是背景圖狀態(tài)列表消略,可以跟圖片一樣使用,背景會根據(jù)組件的狀態(tài)變化而變化瞎抛。drawable-selector資源文件一般存儲于/res/drawable/filename.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]      drawable的大小是否當(dāng)中狀態(tài)變化艺演,true表示是變化,false表示不變換桐臊,默認(rèn)為false
    android:dither=["true" | "false"]            當(dāng)位圖與屏幕的像素配置不一樣時(例如胎撤,一個ARGB為8888的位圖與RGB為555的屏幕)會自行遞色(dither)。設(shè)置為false時不可遞色断凶。默認(rèn)true
    android:variablePadding=["true" | "false"]>  內(nèi)邊距是否變化伤提,默認(rèn)false
    <item
        android:drawable="@[package:]drawable/drawable_resource"  圖片資源
        android:state_pressed=["true" | "false"]     是否觸摸
        android:state_focused=["true" | "false"]     是否獲取到焦點(diǎn)
        android:state_hovered=["true" | "false"]     光標(biāo)是否經(jīng)過
        android:state_selected=["true" | "false"]    是否選中
        android:state_checkable=["true" | "false"]   是否可勾選
        android:state_checked=["true" | "false"]     是否勾選
        android:state_enabled=["true" | "false"]     是否可用
        android:state_activated=["true" | "false"]   是否激活
        android:state_window_focused=["true" | "false"] />  所在窗口是否獲取焦點(diǎn)
</selector>

**三、layer-list簡介 **
Android自帶的layer-list可以實(shí)現(xiàn)多個圖層堆疊顯示的效果认烁,借這個特性可以做一些特別的效果(比如:陰影肿男、投影,旋轉(zhuǎn)疊加效果等)却嗡。

  • 效果圖:
layer-list_01.png
layer_list_02.png
layer_list_03.png
  • 簡單介紹一下效果1的實(shí)現(xiàn)舶沛,首先是布局文件:
    <ImageView
        android:layout_width="66dp"
        android:layout_height="72dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:scaleType="centerInside"
        android:src="@drawable/layer_list_photo_01" />
  • 其中用到了res/drawable/layer_list_photo_01.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      
    <!-- 第一層的為QQ企鵝照片-->
    <item android:id="@+id/qq"
        android:drawable="@mipmap/photo_background" />

    <!-- 第二層的為相框照片圖案 ,下面的層次會依次覆蓋上面的層次窗价;
    left,top,right,bottom分別是距各個方向的距離如庭,靈活使用他們可以實(shí)現(xiàn)各種豐富多彩的效果-->
    <item android:id="@+id/qq_background"
        android:drawable="@mipmap/photo"
        android:left="10dp"
        android:top="18dp"
        android:right="25dp"
        android:bottom="35dp" />
</layer-list>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舌镶,隨后出現(xiàn)的幾起案子柱彻,更是在濱河造成了極大的恐慌豪娜,老刑警劉巖餐胀,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哟楷,死亡現(xiàn)場離奇詭異,居然都是意外死亡否灾,警方通過查閱死者的電腦和手機(jī)卖擅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墨技,“玉大人惩阶,你說我怎么就攤上這事】弁簦” “怎么了断楷?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崭别。 經(jīng)常有香客問我冬筒,道長,這世上最難降的妖魔是什么茅主? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任舞痰,我火速辦了婚禮,結(jié)果婚禮上诀姚,老公的妹妹穿的比我還像新娘响牛。我一直安慰自己,他們只是感情好赫段,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布呀打。 她就那樣靜靜地躺著,像睡著了一般糯笙。 火紅的嫁衣襯著肌膚如雪聚磺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天炬丸,我揣著相機(jī)與錄音瘫寝,去河邊找鬼。 笑死稠炬,一個胖子當(dāng)著我的面吹牛焕阿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播首启,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼暮屡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了毅桃?” 一聲冷哼從身側(cè)響起褒纲,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤准夷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莺掠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衫嵌,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年彻秆,在試婚紗的時候發(fā)現(xiàn)自己被綠了楔绞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡唇兑,死狀恐怖酒朵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扎附,我是刑警寧澤蔫耽,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站留夜,受9級特大地震影響匙铡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜香伴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一慰枕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧即纲,春花似錦具帮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膊畴,卻和暖如春掘猿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唇跨。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工稠通, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人买猖。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓改橘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玉控。 傳聞我的和親對象是個殘疾皇子飞主,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

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