android 從5.0開始码泛,Material Design風格盛行猾封,這一次真的從UI交互上把ios按在地上摩擦,作為我們android 開發(fā)者噪珊,當然也要認真學習MD控件晌缘,包括
- TextInputLayout
- CardView
- SwitchCompat
- SnackBar
-
FloatingActionButton
以及更多的齐莲,這里本文主要講類似實現cardView 卡片式效果的方法,比cardView更簡單的那種
cardView我用的很多磷箕,不過感覺還是比較麻煩的,需要記住以下屬性
app:cardBackgroundColor這是設置背景顏色
app:cardCornerRadius這是設置圓角大小
app:cardElevation這是設置z軸的陰影
app:cardMaxElevation這是設置z軸的最大高度值
app:cardUseCompatPadding是否使用CompatPadding
app:cardPreventCornerOverlap是否使用PreventCornerOverlap
app:contentPadding 設置內容的padding
app:contentPaddingLeft 設置內容的左padding
app:contentPaddingTop 設置內容的上padding
app:contentPaddingRight 設置內容的右padding
app:contentPaddingBottom 設置內容的底padding
使用cardView作為容器选酗,里面就可以包裹控件,從而實現卡片式效果搀捷,也是支持陰影的星掰,但是,我要說的嫩舟,cardView布局更簡單氢烘!
<LinearLayout
android:layout_width="match_parent"
android:layout_height="77dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:layout_marginRight="15dp"
android:background="@drawable/shape_popwin_bg_white"
android:elevation="3dp"
android:outlineProvider="bounds"
android:translationZ="3dp">
在5.0版本以上,任意的viewgroup 組件家厌,像LinearLayout播玖,ScrollView,ConstraintLayout等等布局中饭于,只需要加入三個屬性即可蜀踏,
- android:elevation="3dp"
- android:outlineProvider="bounds"
- android:translationZ="3dp"
- android:background="@drawable/shape_popwin_bg_white"
background是一個圓形圓角shape,這里就不貼了
MD設計里面掰吕,視圖可以投射陰影果覆, elevation 值決定了陰影的大小和順序。通俗來講殖熟,就是elevation是一個權重局待,是陰影的初始值,是在靜態(tài)的菱属,相應的钳榨,translationZ則是動態(tài)值,是在Z軸上的偏移變化纽门,陰影效果薛耻,其實就是抬高控件的Z軸赏陵,使之呈現立體的感覺饼齿,那么久可以很好地顯示陰影。
Z=elevation+translationZ
這樣是不是就好理解了呢蝙搔?我們來看一下效果圖
是不是已經有了卡片效果的感覺候醒,更重要的是比使用CardView 更加簡單高效!
但是如果運行到真機杂瘸,仔細觀察,你會發(fā)現伙菊,雖然我們的shape是圓角的败玉,但是敌土,圓角下面的陰影居然是尖角的,這個問題运翼,讓我一時間摸不著頭腦返干,難道是shape的問題?
一番嘗試后我發(fā)現原來是outlineProvider屬性的問題血淌,那么我們來學習下這個屬性
outlineProvider用來指定輪廓的判定方式
通過編輯器可以看出矩欠,總共有四種指判方式:
- none 即使設置了Z屬性,也不會顯示陰影
- background 會按照背景來設置陰影形狀
- bounds 會按照View的大小來描繪陰影
-
paddedBounds 和bounds類似悠夯,不過陰影會稍微向右偏移一點
原來設置了bounds 癌淮,輪廓會按照view的大小來繪制陰影,這也就不難解釋沦补,為什么設置了圓角shape后乳蓄,陰影依然存在尖角問題,哈哈夕膀,現在你明白了嗎虚倒?
如果你的陰影效果沒顯示,那么我建議你從以下幾個方面檢查
- 是否是設置在ViewGrop控件上
- 是否留夠了邊距用來顯示陰影
- 是否設置了背景色产舞,最好是用shape
- 是否開啟了硬件加速
OK,就是這樣魂奥,以后就愉快地使用陰影效果吧!