View 新增陰影效果

2021-08-13 21:35:16 字數 2176 閱讀 1372

hitomis/crazyshadow

簡介:為你的 view 新增陰影效果就是一句**的事.

說明:crazyshadow 是乙個專門為 view 新增陰影效果的庫。 設計 crazyshadow 主要是因為自己一直想為最近編寫的spinmenu 與 thumbnailmenu 還有將要完成的 activityswitch 新增陰影效果,之前在網上一直沒有找到合適的可以用的參考案例。所以只能 自己去編寫這樣乙個 library。

而在實際運用在,發現理想總是豐滿的,現實很骨感。雖然可以實現優美的效果以及多功能性,但是使用場景比較單一:只能 為傳統的矩形 ui(即最終顯示效果)新增陰影。為什麼結果會是這樣呢?大家都知道,乙個 view 顯示的模型肯定是乙個矩形,不 管如何自定義 view 都有 left、top、right、bottom 以及 width、height 等一些概念,而這些概念也定位了 view 的模 型必定為乙個矩形。所以 陰影效果的新增依據模型必定也是乙個矩形。

雖然有了很多限制,我想既然都做了,還是盡自己最大努力吧,目前 crazyshadow 支援三種方式為 view 新增陰影效果。

wrap : 以包裝 view 的方式新增陰影效果。該方式會改變 view 的大小。因為如果保持 view 大小不變同時又在 view 四周新增了陰影,那麼 view 的尺寸定會比之前大,這樣可能會引起 view 周圍其他 view 的位置變化。

fall : 以 view 的根檢視(decorview 中的 framelayout) 中新增一層陰影效果。不過因為與 view 不在乙個布局層面上,所以當發生使用者互動使原 view 的位置發生改變後,陰影還是會留在原來的位置。此種方式只能在位置不會發生改變的 view 上使用。慎用啊

drawable : 直接建立乙個附帶陰影效果的矩形(支援圓角) drawable 作為 view 的 background, 簡單粗暴。不過因為 background 的最大尺寸為原 view 的尺寸,所以設定了陰影後,原 view 大小會依據配置的陰影大小發生變化,並且原 view 的位置會向上的偏移來顯示出陰影的效果。

匯入 cslibrary module 中的 作為依賴庫,後期看情況是否上傳到 jcenter

new crazyshadow.builder()

.setcontext(this)

.setdirection(crazyshadowdirection.all)

.setshadowradius(dip2px(3))

.setcorner(dip2px(5))

.setbackground(color.parsecolor("#96a993"))

.setimpl(crazyshadow.impl_draw)

.action(findviewbyid(r.id.relay_draw1));

屬性說明

impl

以何種方式新增陰影,支援 wrap、fall、drawable 三種方式

baseshadowcolor

陰影的基本顏色,即最深的顏色,與 colors 表示為同乙個作用, 如果 baseshadowcolor 與 colors 都不設定,陰影會使用預設顏色

background

修改 view 的背景色,如果使用 drawable 方式新增陰影,那麼該屬性必須新增

colors

繪製陰影時需要的乙個顏色由深到淺且長度為 3 的陣列, 該屬性與 baseshadowcolor 起同乙個作用,如果單單只設定 baseshadowcolor 也會自動轉換成為 colors

corner

陰影頂點的內側弧度。以適配被設定的 view 是圓角的情況, 對使用 drawable 方式設定陰影時,該屬性表示為圓角矩形背景的圓角角度

shadowradius

陰影大小

direction

設定陰影在 view 上顯示的方位, 支援的方位詳情可以檢視 crazyshadowdirection

方法說明

make

為 view 新增陰影效果, 使用 builder 的 action 方法時會自動呼叫

remove

移除陰影

hide

隱藏陰影,與 remove 不同的是,hide 只是隱藏了 view 周圍的陰影效果,並沒有移除

show

如果呼叫了 hide ,可以再使用 show 將陰影效果顯示出來

View 新增陰影效果

hitomis crazyshadow 簡介 為你的 view 新增陰影效果就是一句 的事.說明 crazyshadow 是乙個專門為 view 新增陰影效果的庫。設計 crazyshadow 主要是因為自己一直想為最近編寫的spinmenu 與 thumbnailmenu 還有將要完成的 acti...

如何給物體新增陰影效果

陰影在3d遊戲中是非常重要的乙個細節,所以這一章我們專門介紹如何給物體新增陰影效果。我們在執行前面的demo的時候會有一種感覺,就是經過大樹的時候會有陰影投射到方塊上。那麼下面就來介紹一下如何給方塊新增陰影。燈光是陰影產生的乙個非常重要的要素,預設的燈光的shadowtype是noshadows 將...

如何為控制項新增陰影效果

資料 於codeproject,實現的效果是這樣的 呼叫 crect rcedit2 m edit2.getwindowrect rcedit2 screentoclient rcedit2 rcedit2.inflaterect 2,2,0,0 shadow.paint dcpaint,rcedi...