建立Material Design風格Android應用--自定義陰影和裁剪視圖

以前已經寫過經過應用主題和使用ListView, CardView,應用Material Design樣式,同一時候都都可以經過support library向下兼容。今天要寫的陰影和視圖裁剪。沒法向下兼容。請注意。html

​Material Design 爲用戶界面元素引入了深度這個元素。深度幫助用戶理解各個元素之間的重要關聯和幫助用戶關注他們手上的任務。android

視圖的高度(elevation)。經過Z屬性表現,經過他的陰影肯定:z值更高的視圖投影出更大的陰影。視圖僅僅在Z=0的平面上投影處陰影;他們不會投影陰影在其它放在如下的視圖上面和高於z=0的平面。app

有更高Z值的視圖擋住Z值較低的視圖。ide

無論怎樣。Z值不會影響到View的大小。佈局

高度也是實用的,當在運行一些動做的時候建立動畫讓組件升起。動畫

爲視圖分配高度

一個View的Z值有兩個組成部分,elevation(高度)translation(平移).elevation是一個靜態部分,translation 用於動畫:ui

Z = elevation + translationZspa


不一樣高度的視圖的陰影設計

在佈局文件裏設置evelation 使用android:elevation,在代碼中使用View.setElevation()方法。
設置一個視圖的平移,使用View.setTranslationZ()方法。code

新的方法ViewPropertyAnimator.z()ViewPropertyAnimator.translationZ()可以讓你更easy的變更視圖的高度。不少其它的信息,看ViewPropertyAnimator的Api文檔http://developer.android.com/reference/android/view/ViewPropertyAnimator.html。和屬性動畫的開發指南:http://developer.android.com/guide/topics/graphics/prop-animation.html

你也可以使用StateListAnimator方式定義這些文件在xml文件裏。

特別適用於,狀態改變時運行的動畫,比方用戶點擊button。

不少其它信息,請看動畫視圖狀態改變,下次在動畫一節講。
Z值在測量上使用和X,Y值同樣的單位。

本身定義視圖陰影和輪廓

視圖的背景邊界決定了陰影的默認形狀。輪廓(Outlines)表明了圖形對象的外形狀,並肯定了對觸摸反饋區的波紋。

看這個視圖,定義一個背景Drawable:

<TextView
    android:id="@+id/myview"
    ...
    android:elevation="2dp"
    android:background="@drawable/myrect" />

背景是一個圓角矩形

<!-- res/drawable/myrect.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="#42000000" />
    <corners android:radius="5dp" />
</shape>

當這個背景drawable做爲視圖的輪廓。視圖投射出圓角陰影。

提供一個本身定義的輪廓,可以覆蓋默認視圖陰影的形狀。

在本身的代碼中本身定義一個輪廓:

1.繼承ViewOutlineProvider類
2.重寫getOutline()方法
3.在視圖中設置輪廓,使用View.setOutlineProvider()方法

你可以建立橢圓和圓角矩形輪廓使用OutLine類中的方法。視圖默認的outline provider會依據視圖的背景來生成輪廓。可以設置視圖的outline provider爲null。來阻止投射陰影。

 裁剪視圖

裁剪視圖功能,可以讓你更easy的改變視圖的形狀。你可以裁剪視圖爲了和其它的設計元素保持一致。或者改變成形狀響應用戶的輸入。你可以裁剪一個視圖的輪廓使用View.setClipToOutLine()方法,或者android:clipToOutline屬性。僅僅有矩形,圓角矩形,圓圈的輪廓支持被裁剪,可以使用Outline.canClip()方法檢測是否支持被裁剪。

裁剪視圖到一個drawable的形狀。設置drawable做爲視圖的背景(讓視圖顯示在其上),並且調用View.setClipToOutline()方法。

裁剪視圖是一個耗費的操做,裁剪視圖時不要使用形狀動畫。達到這樣的效果,請使用Reveal Effect 動畫(下節講)。

 總結

上面可以看到,設置陰影很是easy:

  1. 設置eleavation值。
  2. 加入背景或者設置一個outline.

參考資料:http://developer.android.com/training/material/shadows-clipping.html

原文地址:http://blog.isming.me/2014/10/26/creating-app-with-material-design-three-shadows/。轉載請註明出處。

相關文章
相關標籤/搜索