Android樣式的開發(fā):layer-list實例詳解
上圖Tab的背景效果,和帶陰影的圓角矩形,是怎么實現(xiàn)的呢?大部分的人會讓美工切圖,用點九圖做背景。但是,如果只提供一張圖,會怎么樣呢?比如,中間的Tab背景紅色底線的像素高度為4px,那么,在mdpi設(shè)備上顯示會符合預(yù)期,在hdpi設(shè)備上顯示時會細了一點點,在xhdpi設(shè)備上顯示時會再細一點,在xxhdpi上顯示時又細了,在xxxhdpi上顯示時則更細了。因為在xxxhdpi上,1dp=4px,所以,4px的圖,在xxxhdpi設(shè)備上顯示時,就只剩下1dp了。所以,為了適配好各種分辨率,必須提供相應(yīng)的多套圖片。如果去查看android的res源碼資源,也會發(fā)現(xiàn),像這種Tab的背景點九圖,也根據(jù)不同分辨率尺寸提供了不同尺寸的點九圖片。
但是,在這個demo里,都沒有用到任何實際的圖片資源,都是用shape、selector,以及本篇要講解的layer-list完成的。
使用layer-list可以將多個drawable按照順序?qū)盈B在一起顯示,像上圖中的Tab,是由一個紅色的層加一個白色的層疊在一起顯示的結(jié)果,陰影的圓角矩形則是由一個灰色的圓角矩形疊加上一個白色的圓角矩形。先看下代碼吧,以下是Tab背景的代碼:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 第一種加載方式 --> <!--<item android:drawable="@drawable/bg_tab_selected" android:state_checked="true" />--> <!-- 第二種加載方式 --> <item android:state_checked="true"> <layer-list> <!-- 紅色背景 --> <item> <color android:color="#E4007F" /> </item> <!-- 白色背景 --> <item android:bottom="4dp" android:drawable="@android:color/white" /> </layer-list> </item> <item> <layer-list> <!-- 紅色背景 --> <item> <color android:color="#E4007F" /> </item> <!-- 白色背景 --> <item android:bottom="1dp" android:drawable="@android:color/white" /> </layer-list> </item> </selector>
以下是帶陰影的圓角矩形:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 灰色陰影 --> <item android:left="2dp" android:top="4dp"> <shape> <solid android:color="@android:color/darker_gray" /> <corners android:radius="10dp" /> </shape> </item> <!-- 白色前景 --> <item android:bottom="4dp" android:right="2dp"> <shape> <solid android:color="#FFFFFF" /> <corners android:radius="10dp" /> </shape> </item> </layer-list>
從上面的示例代碼可以看到,layer-list可以作為根節(jié)點,也可以作為selector中item的子節(jié)點。layer-list可以添加多個item子節(jié)點,每個item子節(jié)點對應(yīng)一個drawable資源,按照item從上到下的順序疊加在一起,再通過設(shè)置每個item的偏移量就可以看到陰影等效果了。layer-list的item可以通過下面四個屬性設(shè)置偏移量:
- android:top 頂部的偏移量
- android:bottom 底部的偏移量
- android:left 左邊的偏移量
- android:right 右邊的偏移量
這四個偏移量和控件的margin設(shè)置差不多,都是外間距的效果。如何不設(shè)置偏移量,前面的圖層就完全擋住了后面的圖層,從而也看不到后面的圖層效果了。比如上面的例子,Tab背景中的白色背景設(shè)置了android:bottom之后才能看到一點紅色背景。那么如果偏移量設(shè)為負值會怎么樣呢?經(jīng)過驗證,偏移超出的部分會被截掉而看不到,不信可以自己試一下。有時候這很有用,比如當(dāng)我想顯示一個半圓的時候。
另外,關(guān)于item的用法,也做下總結(jié):
1.根節(jié)點不同時,可設(shè)置的屬性是會不同的,比如selector下,可以設(shè)置一些狀態(tài)屬性,而在layer-list下,可以設(shè)置偏移量;
2.就算父節(jié)點同樣是selector,放在drawable目錄和放在color目錄下可用的屬性也會不同,比如drawable目錄下可用的屬性為android:drawable,在color目錄下可用的屬性為android:color;
3.item的子節(jié)點可以為任何類型的drawable類標(biāo)簽,除了上面例子中的shape、color、layer-list,也可以是selector,還有其他沒講過的bitmap、clip、scale、inset、transition、rotate、animated-rotate、lever-list等等。
結(jié)尾
layer-list篇就講到這里了,示例代碼也已經(jīng)更新放上github,地址:
https://github.com/keeganlee/kstyle.git
以上就是對Android Layer-list 樣式的示例整理,后續(xù)繼續(xù)補充相關(guān)資料,謝謝大家對本站的支持!
- Android APK優(yōu)化工具Zipalign詳解
- Android 逆向?qū)W習(xí)詳解及實例
- Android自定義圓形倒計時進度條
- AndroidSDK Support自帶夜間、日間模式切換詳解
- Android 動態(tài)高斯模糊效果教程
- 利用Android中BitmapShader制作自帶邊框的圓形頭像
- Android中使用ViewStub實現(xiàn)布局優(yōu)化
- Android優(yōu)質(zhì)索尼滾動相冊
- Android ViewPager實現(xiàn)Banner循環(huán)播放
- Android Zipalign工具優(yōu)化Android APK應(yīng)用
相關(guān)文章
Android實現(xiàn)中軸旋轉(zhuǎn)特效 Android制作別樣的圖片瀏覽器
這篇文章主要為大家詳細介紹了Android實現(xiàn)中軸旋轉(zhuǎn)特效,制作別樣的圖片瀏覽器,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11解決Android SearchView不顯示搜索icon的問題
這篇文章主要介紹了解決Android SearchView不顯示搜索icon問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05Android自定義View實現(xiàn)豎直跑馬燈效果案例解析
這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)豎直跑馬燈效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07