1. 程式人生 > >安卓 做一個簡單的背景陰影

安卓 做一個簡單的背景陰影

這裡寫圖片描述

通常給一些view加上陰影效果會使頁面效果更好。這裡只對21以上的機子經行說明,經市場統一21一下的手機已經不足市場份額的20%

所以,如果你的 App 的 minSdkVersion 就是 21 的話,直接使用這兩個屬性是最優的解決辦法。

 elevation 屬性

elevation 屬性,主要用於給 View 增加一個高度,可以直接被加在 View 控制元件上,呈現在介面上,就是一個帶陰影的效果。

在 layout-xml 佈局中,可以通過 android:elevation 屬性來設定,而在 Java 程式碼中,通過 View.setElevation() 方法來使用它。

直接使用 elevation 屬性設定即可,它接收一個高度的引數,只需要按我們的需要配置即可。

需要注意的是,View 的陰影一定是需要有背景的 View 在視覺上增高之後,投射出來的。也就是類似於打光的陰影效果。簡單來說,就是需要為 View 設定一個 Background
,可以使用 android:background 屬性或者 View.setBackground() 方法設定,否者 elevation 的屬性設定將無效。這裡的 Background 只需要設定一個 Drawable 即可,你當然也可以選擇一個圖片或者一個純色的 <shape/> 了。 translationZ 屬性 translationZ 屬性,主要用於給 View 增加一個在 Z 軸上的變換效果。它和 elevation 配合起來,就是一個一加一等於二的效果。也可以用於設定 View 的高度。 在 layout-xml 佈局中,可以通過 android:translationZ 屬性來設定它,而在 Java 程式碼中,可以通過 View.setTranslationZ() 方法來使用它。 一般來說,我們可以直接使用 android:translationZ 屬性來設定 View,當你配合 android:elevation 屬性一起使用的時候,它們對 View 的高度是累加的,當然你也可以只使用其中一個屬性。 而看到 translationZ 這樣的屬性,很輕易就聯想到了 translationX 和 translationY 了,它們實際上就是不同維度的設定,思路上很像,但是原理不同。對 X、Y 軸的操作並沒有 Api Level
的限制,這一點需要清楚。 和 elevation 屬性一樣,translationZ 也是需要配合 Background 的設定才會生效的,這個應該不難理解。

如果不在意 Api level 的話,你完全可以使用 android:elevation 和 android:translationZ 兩個屬性來做的陰影的效果,效果也是非常好的,而且它的陰影實際上是不佔用 View 的佈局大小的,它會在原本的佈局之外,向外擴散,所以也不會影響 View 本身大小的視覺效果。

不過它也有缺陷,你只能通過設定這兩個屬性來調整陰影的大小,沒辦法做到精確掌控,並且無法修改陰影的顏色。