Skip to content

Most visited

Recently visited

navigation

定義陰影和裁剪視圖

材料設計為 UI 元素引入高度的概念。高度有助使用者了解每個元素的相對重要性並將焦點放在手邊的工作上。

視圖的高度以 Z 屬性表示,決定其陰影的視覺外觀:視圖的 Z 值越高,投射範圍越大,陰影也就越柔和。 Z 值較高的視圖會遮住 Z 值較低的視圖。然而,視圖的 Z 值不會影響視圖的大小。

陰影是由較高的上層視圖繪製,因此也和標準視圖裁剪一樣,預設由上層視圖裁剪陰影。

當小工具在執行某些操作動作而暫時升高到視圖平面的上方時,高度對於建立動畫也非常實用。

如需有關材料設計高度的詳細資訊,請參閱 3D 空間中的物件

指定視圖的高度

視圖的 Z 值有兩個部分:

Z = elevation + translationZ

圖 1 - 不同視圖高度的陰影。

如要在版面配置定義中設定視圖的高度,請使用 android:elevation 屬性。 如果要在操作行為的程式碼中設定檢視的高度,請使用 View.setElevation() 方法。

如要在操作行為的程式碼中設定檢視的高度,請使用 View.setTranslationZ() 方法。

新的 ViewPropertyAnimator.z()ViewPropertyAnimator.translationZ() 方法可以很輕易地讓視圖高度變得栩栩如生。 如需詳細資訊,請參閱 ViewPropertyAnimator的 API 參考資料和屬性動畫開發人員指南

您也可以使用 StateListAnimator 以宣告的方式指定這些動畫。 當狀態變更觸發動畫時, 例如使用者按下按鈕,這會特別實用。 如需詳細資訊,請參閱動畫顯示視圖狀態變更

Z 值的測量單位為 dp (密度獨立像素)。

自訂視圖陰影和外框

檢視背景可繪項目的邊界決定了視圖陰影的預設形狀。外框代表圖形物件的外部形狀,並可定義輕觸回饋的漣漪區域。

我們來看看這個使用背景可繪項目定義的視圖:

<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>

因為背景可繪項目定義了視圖的外框,所以視圖投射出有圓形邊角的陰影。 如果提供自訂的外框,則會覆寫視圖陰影的預設形狀。

在程式碼中定義視圖的自訂外框:

  1. 延伸 ViewOutlineProvider 類別。
  2. 覆寫 getOutline() 方法。
  3. 使用 View.setOutlineProvider() 方法對您的視圖指定新的外框提供者。

您可以使用 Outline 類別中的方法,建立橢圓形外框和有圓形邊角的長方形外框。 視圖的預設外框提供者會從視圖的背景取得外框。 如果要避免視圖投射出陰影,請將視圖的外框提供者設定為 null

裁剪視圖

裁剪視圖可以讓您輕鬆地變更視圖的形狀。您可以裁剪視圖,讓視圖與其他設計元素有一致的外觀,或變更視圖的形狀來回應使用者的輸入。您可以使用 View.setClipToOutline() 方法或 android:clipToOutline 屬性,將視圖裁剪為其外框區域。 根據 Outline.canClip() 方法的定義,只有長方形、圓形和圓角長方形的外框才支援裁剪。

如要將視圖裁剪為可繪項目的形狀,請將可繪項目設定為視圖的背景 (如上所示),然後呼叫 View.setClipToOutline() 方法。

裁剪視圖是一種耗費資源的操作,所以請不要將您用來裁剪視圖的形狀做成動畫。 如果想要達到這種效果,請使用顯示效果動畫。

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

在 WeChat 上追蹤 Google Developers

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (Dec 2017 Android Platform & Tools Survey)