CrazyShadow
項目位址: 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 的位置會向上的偏移來顯示出陰影的效果。
Preview
Import
導入 cslibrary Module 中的 作為依賴庫,後期看情況是否上傳到 Jcenter
Usage
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));
更多示例代碼可以檢視 MainActivity
Attribute
屬性 | 說明 |
---|---|
impl | 以何種方式添加陰影,支援 wrap、fall、drawable 三種方式 |
baseShadowColor | 陰影的基本顔色,即最深的顔色,與 colors 表示為同一個作用, 如果 baseShadowColor 與 colors 都不設定,陰影會使用預設顔色 |
background | 修改 View 的背景色,如果使用 drawable 方式添加陰影,那麼該屬性必須添加 |
colors | 繪制陰影時需要的一個顔色由深到淺且長度為 3 的數組, 該屬性與 baseShadowColor 起同一個作用,如果單單隻設定 baseShadowColor 也會自動轉換成為 colors |
corner | 陰影頂點的内側弧度。以适配被設定的 View 是圓角的情況, 對使用 drawable 方式設定陰影時,該屬性表示為圓角矩形背景的圓角角度 |
shadowRadius | 陰影大小 |
direction | 設定陰影在 View 上顯示的方位, 支援的方位詳情可以檢視 CrazyShadowDirection |
Method
方法 | 說明 |
---|---|
make | 為 View 添加陰影效果, 使用 Builder 的 action 方法時會自動調用 |
remove | 移除陰影 |
hide | 隐藏陰影,與 remove 不同的是,hide 隻是隐藏了 View 周圍的陰影效果,并沒有移除 |
show | 如果調用了 hide ,可以再使用 show 将陰影效果顯示出來 |