今天要寫的陰影和視圖裁剪,沒法向下兼容,請注意。android
Material Design 爲用戶界面元素引入了深度這個元素。深度幫助用戶理解各個元素之間的重要關聯和幫助用戶關注他們手上的任務。ide
視圖的高度(elevation),經過Z屬性表現,經過他的陰影肯定:z值更高的視圖投影出更大的陰影。視圖只在Z=0的平面上投影處陰影;他們不會投影陰影在其餘放在下面的視圖上面和高於z=0的平面。佈局
有更高Z值的視圖擋住Z值較低的視圖。不管如何,Z值不會影響到View的大小。動畫
高度也是有用的,當在執行一些動做的時候建立動畫讓組件升起。spa
爲視圖分配高度設計
一個View的Z值有兩個組成部分,elevation(高度)和translation(平移).elevation是一個靜態部分,translation 用於動畫:orm
Z = elevation + translationZ視頻
不一樣高度的視圖的陰影xml
在佈局文件中設置evelation 使用android:elevation,在代碼中使用View.setElevation()方法。對象
設置一個視圖的平移,使用View.setTranslationZ()方法。
新的方法ViewPropertyAnimator.z()和ViewPropertyAnimator.translationZ()能夠讓你更容易的變更視圖的高度。更多的信息,看e良師益友的Android應用開發視頻教程。
你也能夠使用StateListAnimator方式定義這些文件在xml文件中。特別適用於,狀態改變時執行的動畫,好比用戶點擊按鈕。更多信息,請看動畫視圖狀態改變,下次在動畫一節講。
Z值在測量上使用和X,Y值同樣的單位。
自定義視圖陰影和輪廓
視圖的背景邊界決定了陰影的默認形狀。輪廓(Outlines)表明了圖形對象的外形狀,並肯定了對觸摸反饋區的波紋。
看這個視圖,定義一個背景Drawable:
背景是一個圓角矩形
當這個背景drawable做爲視圖的輪廓,視圖投射出圓角陰影。提供一個自定義的輪廓,能夠覆蓋默認視圖陰影的形狀。
在本身的代碼中自定義一個輪廓:
1.繼承ViewOutlineProvider類
2.重寫getOutline()方法
3.在視圖中設置輪廓,使用View.setOutlineProvider()方法
你能夠建立橢圓和圓角矩形輪廓使用OutLine類中的方法。視圖默認的outline provider會根據視圖的背景來生成輪廓。能夠設置視圖的outline provider爲null,來阻止投射陰影。
裁剪視圖
裁剪視圖功能,能夠讓你更容易的改變視圖的形狀。你能夠裁剪視圖爲了和其餘的設計元素保持一致,或者改變成形狀響應用戶的輸入。你能夠裁剪一個視圖的輪廓使用View.setClipToOutLine()方法,或者android:clipToOutline屬性。只有矩形,圓角矩形,圓圈的輪廓支持被裁剪,能夠使用Outline.canClip()方法檢測是否支持被裁剪。
裁剪視圖到一個drawable的形狀,設置drawable做爲視圖的背景(讓視圖顯示在其上),而且調用View.setClipToOutline()方法。
裁剪視圖是一個耗費的操做,裁剪視圖時不要使用形狀動畫。達到這種效果,請使用Reveal Effect 動畫(下節講)。
總結
上面能夠看到,設置陰影很簡單:
設置eleavation值。
添加背景或者設置一個outline.
更多關於Android應用開發的知識、技巧請關注e良師益友網。