【绝非标题党】这个库绝对比 CardView 强大

写这个控件的目的


有一次, 在我的工作当中遇到了这样的一个需求,要实现阴影的效果,需求图如下:


1575124907172.jpg

其实粗略一看,要实现这个阴影 用cardView, 但是当我用了cardView 实现后 满足不了产品的要求,cardView实现 的阴影太黑,不够温柔,网上找的也满足不了自己的需求。于是自己花了点时间实现了一下。

使用方式


在根目录的build.gradle 引入maven

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

在module的 dependencies下面添加

implementation 'com.richzjc:ShadowLib:1.0.15'

注意: 当前控件包裹的子控件只能有一个

示例

<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的项目 在真机上面查看

WechatIMG262.png
WechatIMG261.png

其它情况的效果图请下载项目自己修改属性运行后查看

github地址

原理


该控件是属于一个组合控件, MyShadowLayout是对外暴露的一个控件,用于在布局里面使用。
但是在源码里面还包括了MyCardView, ShadowView两个控件。
而这两个 控件是直接添加在了MyShadowLayout里面。
其作用:
MyCardView
主要控件圆角

ShadowView
主要实现的是阴影的效果

MyShadowLayout
类似于一个管家的作用, 重写了OnMeasure方法, onLayout方法
虽然在布局里面MyShadowLayout作为父控件,包裹了子控件。
但真正实现的逻辑是包裹的子控件最终是添加在了MyCardView上面的

其它文章:
kotlin DSL开发
android 面试题
android 夜间模式的切换
快速获取Bundle里面参数
android EventBus源码阅读
AOP之动态代理原理
Handler源码理解
IOC框架之Dagger详解

多学总比少学好

所谓 面试造飞机, 入职拧螺丝。 这句话一点也不假, 面试时的技术不仅仅 是 要学会用, 还得要知其原理。懂其原理,才能区分其技术水平, 而作为android开发的我们, java作为我们的开发语言。 所以面试官往往会问一些java底层的原理。这其中包括, java 多线程, 各种各样的锁机制, 以及cas, 原子性 的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容