開發(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é)尾給出)
一、shape簡介
我們使用shape可以很方便的在xml文件中實(shí)現(xiàn)各種常用的幾何形狀
-
效果圖:
- 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的分類:
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)疊加效果等)却嗡。
- 效果圖:
- 簡單介紹一下效果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>
**關(guān)于項目中閃屏頁無白屏秒開和分屏過渡動畫的實(shí)現(xiàn): **
請參考這篇文章《閃屏頁無白屏秒開和分屏過渡動畫的實(shí)現(xiàn)》demo下載地址:點(diǎn)擊打開