国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android Material Design 陰影實現示例

2019-12-12 01:00:04
字體:
來源:轉載
供稿:網友

本文介紹了Android Material Design 陰影實現示例,分享給大家,具體如下:

讓 View 產生陰影有以下 4 種方式:

  1. 控制 elevation
  2. 使用 OutlineProvider
  3. 使用 9 圖
  4. 使用 MD 風格的控件,如 CardView,FloatingActionButton

0.Z軸的概念

Android 在 5.0 及以后采用了 Material Design 設計語言,引入了 Z 軸的概念,也就是垂直于屏幕的軸,Z 軸會讓 View 產生陰影的效果:


想象有一束斜光投向屏幕,Z 軸值越大,離光就越近,陰影的范圍就越大;Z 軸值越小,離光就越遠,陰影的范圍就越小。而:

Z=elevation+ translationZ

elevation 一般是寫在 xml 文件中做靜態配置,translateZ 是用來控制動畫效果。

是 Z 軸讓 View 產生了陰影,我們要控制陰影就是控制 Z 軸啦:

1.控制 elevation

控制 elevation,需要先設置 View 的 BackGround,再設置 elevation。

首先配置一個 drawable:

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

再設置 background 和 elevation:

<TextViewandroid:id="@+id/myview"android:layout_width="100dp"android:layout_height="100dp"android:elevation="2dp"android:background="@drawable/myrect" />

2.使用 OutlineProvider

第 1 種方式可以滿足大多數情況,但如果 View 的 background 是 color、圖片,甚至是自定義 View 時就無法產生陰影效果了,這是我們需要通過代碼設置陰影。官方稱之為 outline。

view.setOutlineProvider(new ViewOutlineProvider() {@Overridepublic void getOutline(View view, Outline outline) {outline.setRect(0,0,view.getWidth(),view.getHeight());}});

outline 就是繪制的外部陰影樣式,樣式可以是任意的:矩形、園、圓角矩形、甚至是路徑:

outline的方法

3.使用 9 圖

前面兩種方法涵蓋了大多數情況,實在還有意外:比如兼容 5.0 之前的 UI 樣式、UI設計的陰影居然是彩色的!那就使用最后的絕招了: 9 圖。不過使用 9 圖的靈活性實在是差,高度不同就要不同的切圖,這里有一個網站可以自己隨意切陰影圖:http://inloop.github.io/shadow4android/

4.使用官方 MD 組件

其實官方組件的 ActionBar、CardView,FloatingActionButton就自帶陰影,應盡量使用他們,這里就不展開講了。

5.translateZ 動畫

介紹 Z 軸時,說過 Z=elevation+ translationZ。elevation 是靜態的,而 translateZ 是動態的。如我們點擊按鈕時希望它有一個彈起的效果,像這樣:

彈起

其實是給 view 配置狀態動畫控制 translationZ:

android:stateListAnimator="@drawable/selector_elevation"

動畫 xml 如下

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_enabled="true" android:state_pressed="true"><objectAnimatorandroid:duration="@android:integer/config_shortAnimTime"android:propertyName="translationZ"android:valueTo="8dp"android:valueType="floatType" /></item><item><objectAnimatorandroid:duration="@android:integer/config_shortAnimTime"android:propertyName="translationZ"android:valueTo="0dp"android:valueType="floatType" /></item></selector>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳城县| 拜泉县| 肥乡县| 余干县| 淮北市| 长岛县| 甘孜| 乌鲁木齐县| 台安县| 海口市| 文安县| 林甸县| 许昌县| 正镶白旗| 盘锦市| 寻甸| 峨眉山市| 化州市| 滦平县| 安塞县| 商河县| 绥宁县| 古浪县| 三门峡市| 孟村| 恭城| 象山县| 永修县| 建始县| 光山县| 宁陕县| 海丰县| 廊坊市| 兴宁市| 辉南县| 哈尔滨市| 来安县| 徐闻县| 建阳市| 册亨县| 墨竹工卡县|