日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

彻底理解 Android 中的阴影

發(fā)布時間:2025/3/20 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 彻底理解 Android 中的阴影 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果我們想創(chuàng)造更好的 Android App,我相信我們需要遵循 Material Design 的設(shè)計規(guī)范。一般而言,Material Design 是一個包含光線,材質(zhì)和投影的三維環(huán)境。如果我們想要在 App 的開發(fā)過程中,跟隨 Material Design 的設(shè)計原則,那么理解 光 與 陰影 就顯得尤為重要了。

我將嘗試解釋本文中的以下主題。

  • Android 中的 3D
  • 深度(Depth)
  • Z 軸,Elevation 和 Translation Z。
  • 光源
  • 按鈕狀態(tài)(按下和靜止)
  • Outline
  • 自定義的 ViewOutlineProvider

在深入到陰影和光線之前,我想告訴你我們的真實環(huán)境什么?

什么是 3D?

真實的物質(zhì)環(huán)境,是一個三維空間,這意味著所有的物體對象都有 X、Y 和 Z 維度。Z軸與顯示器的平面垂直對齊,正 Z 軸朝向觀察者延伸。在 Material Design 的世界里,每個物體都有 1dp 的厚度。

Android 的 Depth

Material Design 不同于其他的設(shè)計指南,因為它增加了 Depth(深度)的概念。而 Depth 在真實的視覺中,有重要的意義。

我們可以認為我們桌子上有一層紙,如果我們再貼一張紙,我們的眼睛會覺得它有一個深度。

讓我們通過 Material Design 的應(yīng)用截圖來想象它。

讓我們來看看屏幕上的各個元素。

  • 屏幕(表層 - 深度為 0 )
  • CardViews
  • App UI 布局
  • 浮動動作按鈕(Floating Action Button)

這里面,每個元素都在另一個元素之上。CardView 可以滾動,所以我們可以說第一層是可滾動的內(nèi)容,第二層是 AppBar 布局,第三層(頂層)是浮動動作按鈕。

那么,我們?nèi)绾味x層級?我們?nèi)绾巫層脩舾惺艿缴疃?#xff1f;答案是: Z 軸。

Android 中的 Z 值是什么?

View 的 Z 值有兩個組成部分:

  • Elevation:高度,一個靜態(tài)值。
  • Translation Z:Z軸變動值,用于動畫的動態(tài)值。

我總是在想 Elevation 和 Translation Z 有什么區(qū)別。

Elevation 是靜態(tài)的,所以你最好不要動態(tài)的去改變他。如果你想在 Z 軸上做動畫的效果(如按下態(tài)或者靜止態(tài)),你需要使用 Translation Z 屬性。

Translation Z 是動態(tài)的,當(dāng)你創(chuàng)建一個空白項目,并在其中增加一個按鈕的時候,當(dāng)你按下它你將會看到陰影變大了。實際上 Elevation 并沒有變化,而是 Translation Z 屬性在變化。這是 Android 使用默認的狀態(tài)列表動畫,更改 Z 屬性。

Z Vaue = Elevation + TranslationZ

如果我們改變兩個具有 Z 值的 View,讓它們相交。Android如何處理屏幕上的層級?讓我用一個我設(shè)計的圖表向你展示。

另外一個問題,我們?nèi)绾慰吹轿矬w的影子?我們是需要一個陰影嗎?不是的,我們是需要一個光源。

Android 中的光源是什么?

其實問題不在于是什么?而是在哪里。

在現(xiàn)實中,如果我們手持一個手電筒照桌子上的物體(從它的頂部),陰影的長度會縮短,當(dāng)你降低它的時候,陰影的長度會增加。

那么在 Android 的 Material Design 中,光源在哪里?在頂部?還是有角度的?經(jīng)過一番研究,我發(fā)現(xiàn)這個現(xiàn)象。

Android 中存在兩個光源,頂部那個是關(guān)鍵的光源,而另一個是環(huán)境光源,我們看到的陰影實際上是這兩個光源的組合。

讓我們看看顯示的效果。

在 Android 中,我們有很多小部件。按鈕、CardView、對話框,抽屜等所有這些都是視圖。如果有一個光源,我們就有陰影。那么我們?nèi)绾卧贏ndroid中決定 Z 值呢?Material Design 是如何規(guī)定這些的?

有一個示意圖來反映這種情況。

靜止或者按下

正如我之前提到的,在 Android Framework 中,一些動畫是為小部件而實現(xiàn)的。如果你在布局中放置浮動操作按鈕,默認情況下它將具有 6dp 的 Elevation。但是你會注意到當(dāng)你按下按鈕時,FAB 的 Elevation 將會提高到12 dp

讓我告訴你,在這個過程中發(fā)生了什么。

其實FAB有 6dp 的 Elevation。當(dāng)您按下按鈕時,translationZ 值開始增加。ViewPropertyAnimator 通過將 translationZ 值從 0dp 更改為 6dp 來 讓視圖動起來。如果你釋放按鈕,ViewPropertyAnimator 播放動畫,將 translationZ 從 6dp 變到 0dp。你可以為你的視圖創(chuàng)建自定義狀態(tài)列表動畫,并將其添加到你的視圖上。

我們來看一下這個過程的流程圖。

陰影的秘密:Outline

Outline 是一個屬于 android.graphic 下的類,看看它的文檔都說了什么

定義一個簡單的形狀,用于圖形的邊界區(qū)域。

可以為 View 計算,也可以由 Drawable 計算,以驅(qū)動由視圖投射的陰影的形狀,或剪裁視圖的內(nèi)容。

每個 View 都有默認的輪廓以顯示其陰影。如果我們創(chuàng)建一個可繪制的自定義形狀,其輪廓將根據(jù)其形狀在內(nèi)部進行計算。所以,如果我們畫圓,輪廓將會是圓的。如果我們繪制矩形,輪廓將是矩形。

總而言之,有一個 Outlin 可以讓你以不可見的方式看到這個效果。但是,如果我想創(chuàng)建一個自定義的視圖,并動態(tài)地改變它的邊界呢?Android 會為我的自定義視圖提供了 Outline 嗎?

Android 當(dāng)然為我們提供了自定義 Outline 的辦法,那就是 : ViewOutlineProvider。

什么是 ViewOutlineProvider

在我最近的開源的 ScalingLayout 庫中,我沒有對自定義視圖實現(xiàn)陰影效果。我以為這是非常漂亮,沒有影子。但要記住 Material Design 的基礎(chǔ)知識,3D,Depth,Z-Value。

在這個動畫中,我們可能無法確定那些地方是可以被點擊的,而且縮放布局中并沒有陰影。

接下來我們?yōu)樽远x的視圖提供動態(tài)的輪廓。

public class ScalingLayoutOutlineProvider extends ViewOutlineProvider {@Overridepublic void getOutline(View view, Outline outline) {outline.setRoundRect(0, 0, width, height, radius);} } public class ScalingLayout extends FrameLayout {//...viewOutline = new ScalingLayoutOutlineProvider(w, h, currentRadius);setOutlineProvider(viewOutline);//..}

這樣,我們就為自定義的 View 增加了高度的支持。

更多有關(guān)于 ViewOutlineProvider 的使用中,被簡化的一些基礎(chǔ)知識,你可以在 ScalingLayout 中找到細節(jié)。

https://github.com/iammert/ScalingLayout

作者 | Mert ?im?ek

翻譯 | 承香墨影

授權(quán) 承香墨影 翻譯并發(fā)布

原文地址

今天在公眾號后臺回復(fù)成長『成長』,將會得到我整理的一些學(xué)習(xí)資料,也能回復(fù)『加群』,一起學(xué)習(xí)進步。

推薦閱讀:

  • 站在Android開發(fā)的角度,聊聊Airbnb的Lottie
  • 這些工具,讓你寫博客的時候,只需要專注寫作!
  • 找了一天找不到 Bug ? 試試 Git 的二分法吧!!!
  • 如何更精準(zhǔn)的在 Github 上搜索開源庫?你需要這些技巧!
  • Android 開發(fā),遇上 Emoji 頭疼嗎?

轉(zhuǎn)載于:https://www.cnblogs.com/plokmju/p/8472683.html

總結(jié)

以上是生活随笔為你收集整理的彻底理解 Android 中的阴影的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 瑟瑟视频在线免费观看 | 啦啦啦av | 中文字幕一区二区三区精彩视频 | 天堂资源在线观看 | 99精品成人 | 国产福利短视频 | 日本波多野结衣在线 | 91手机视频 | 亚洲精品aaa| 日韩a级片 | 成人性视频免费网站 | 国产精品网站视频 | 亚洲不卡免费视频 | 国产一区二区自拍视频 | 色视频在线免费观看 | 日本黄色录象 | 欧美福利社| 污片免费观看 | 粉嫩aⅴ一区二区三区四区五区 | 9999免费视频| 日韩欧美成人精品 | 欧美性猛交xxxx乱大交 | 国产精品一色哟哟哟 | 浪漫樱花在线观看高清动漫 | 日本xxxx裸体xxxx | 麻豆视频在线观看免费网站黄 | 一卡二卡三卡视频 | 一区二区成人在线 | 国产精品影院在线观看 | 亚洲最大福利网 | 后宫秀女调教(高h,np) | 2019日韩中文字幕mv | 亚洲成年 | 婷婷丁香激情 | 朋友人妻少妇精品系列 | 蜜桃tv一区二区三区 | 日日夜夜操操 | av免费不卡| 亚洲自拍偷拍第一页 | 日韩av毛片在线观看 | 国产精品区一 | 天天色天天插 | 女人扒开腿让男人捅爽 | 国产精品视频在线观看免费 | 久久婷婷视频 | 国产麻豆天美果冻无码视频 | 91成人免费在线 | 午夜草逼 | 亚洲天堂成人av | 啄木乌欧美一区二区三区 | 成人黄色片在线观看 | 精品久久一 | 午夜视频91 | 日日撸夜夜操 | 熟妇熟女乱妇乱女网站 | 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品久久久久久久久久东京 | 亚洲AV无码一区二区伊人久久 | 骚av在线| 97日日夜夜 | 成人吃奶视频 | 操一操视频 | 亚洲精品xxxxx | 久久草视频在线 | 亚洲大尺度视频 | 欧美三级在线播放 | 欧产日产国产69 | www.五月天com | 国产精品久久久久久久久晋中 | 一道本在线观看 | 国产美女一级片 | 99在线观看免费视频 | 有码在线视频 | 性xxxx欧美 | 欧美xxxxbbbb | 亚洲国产无码精品 | 中文无码熟妇人妻av在线 | 男人添女人囗交视频 | 28一20岁女人一级 | 娇小激情hdxxxx学生 | 欧美特黄 | 久久精品视频偷拍 | 337p亚洲精品色噜噜噜 | 亚洲一本在线 | 午夜影视免费 | 日韩一级完整毛片 | 久久久艹| 成年人三级网站 | 2019中文字幕在线视频 | 国产视频精品一区二区三区 | 桃谷绘里香番号 | 亚洲综合自拍偷拍 | 日韩和一区二区 | 国产中文字幕在线观看 | 成人观看网站 | 亚洲综合大片69999 | 又污又黄的网站 | 福利在线免费 | 羞羞答答av |