【絕非標(biāo)題黨】這個(gè)庫絕對(duì)比 CardView 強(qiáng)大

寫這個(gè)控件的目的


有一次, 在我的工作當(dāng)中遇到了這樣的一個(gè)需求,要實(shí)現(xiàn)陰影的效果,需求圖如下:


1575124907172.jpg

其實(shí)粗略一看,要實(shí)現(xiàn)這個(gè)陰影 用cardView, 但是當(dāng)我用了cardView 實(shí)現(xiàn)后 滿足不了產(chǎn)品的要求,cardView實(shí)現(xiàn) 的陰影太黑,不夠溫柔,網(wǎng)上找的也滿足不了自己的需求。于是自己花了點(diǎn)時(shí)間實(shí)現(xiàn)了一下。

使用方式


在根目錄的build.gradle 引入maven

maven { url 'https://dl.bintray.com/richzjc/maven' }

在module的 dependencies下面添加

implementation 'com.richzjc:ShadowLib:1.0.15'

注意: 當(dāng)前控件包裹的子控件只能有一個(gè)

示例

<com.richzjc.shadowlib.MyShadowLayout
            android:layout_width="wrap_content"
            android:layout_height="200dp"
            android:background="#000"
            android:paddingLeft="10dp"
            app:hl_shadowRadius="30dp"
            app:hl_cardCornerRadius="10dp"
            app:hl_shadowSolidColor="#123456"
            app:hl_bottomShow="true"
            app:hl_topShow="true"
            app:hl_rightShow="true"
            >
            <TextView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:background="#f00" />
        </com.richzjc.shadowlib.MyShadowLayout>

控件屬性介紹


<declare-styleable name="ShadowLayout">
        <attr name="hl_topShow" format="boolean" />
        <attr name="hl_bottomShow" format="boolean" />
        <attr name="hl_leftShow" format="boolean" />
        <attr name="hl_rightShow" format="boolean" />
        <attr name="hl_shadowRadius" format="dimension"/>
        <attr name="hl_cardCornerRadius" format="dimension"/>
        <attr name="hl_shadowColor" format="color|reference"/>
        <attr name="hl_shadowSolidColor" format="color|reference"/>
    </declare-styleable>

hl_topShow: 是否顯示上陰影
hl_bottomShow: 是否顯示下陰影
hl_leftShow: 是否顯示左陰影
hl_rightShow: 是否顯示右陰影
hl_shadowRadius: 陰影的寬度
hl_cardCornorRadius: 圓角
hl_shadowColor: 陰影的顏色值
hl_shadowSolidColor: 基本上用不到

效果圖


貌似 上傳上來的效果圖 陰影看著不是很明顯, 可以下載github的項(xiàng)目 在真機(jī)上面查看

WechatIMG262.png
WechatIMG261.png

其它情況的效果圖請(qǐng)下載項(xiàng)目自己修改屬性運(yùn)行后查看

github地址

原理


該控件是屬于一個(gè)組合控件, MyShadowLayout是對(duì)外暴露的一個(gè)控件,用于在布局里面使用。
但是在源碼里面還包括了MyCardView, ShadowView兩個(gè)控件。
而這兩個(gè) 控件是直接添加在了MyShadowLayout里面。
其作用:
MyCardView
主要控件圓角

ShadowView
主要實(shí)現(xiàn)的是陰影的效果

MyShadowLayout
類似于一個(gè)管家的作用, 重寫了OnMeasure方法, onLayout方法
雖然在布局里面MyShadowLayout作為父控件,包裹了子控件。
但真正實(shí)現(xiàn)的邏輯是包裹的子控件最終是添加在了MyCardView上面的

其它文章:
kotlin DSL開發(fā)
android 面試題
android 夜間模式的切換
快速獲取Bundle里面參數(shù)
android EventBus源碼閱讀
AOP之動(dòng)態(tài)代理原理
Handler源碼理解
IOC框架之Dagger詳解

多學(xué)總比少學(xué)好

所謂 面試造飛機(jī), 入職擰螺絲。 這句話一點(diǎn)也不假, 面試時(shí)的技術(shù)不僅僅 是 要學(xué)會(huì)用, 還得要知其原理。懂其原理,才能區(qū)分其技術(shù)水平, 而作為android開發(fā)的我們, java作為我們的開發(fā)語言。 所以面試官往往會(huì)問一些java底層的原理。這其中包括, java 多線程, 各種各樣的鎖機(jī)制, 以及cas, 原子性 的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容