• Stars
    star
    3,394
  • Rank 13,187 (Top 0.3 %)
  • Language
    Java
  • License
    MIT License
  • Created over 5 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

可定制化阴影的万能阴影布局ShadowLayout 3.0 震撼上线。效果赶超CardView。阴影支持x,y轴偏移,支持阴影扩散程度,支持阴影圆角,支持单边或多边不显示阴影;控件支持动态设置shape和selector(项目里再也不用画shape了);支持随意更改颜色值,支持随意更改颜色值,支持随意更改颜色值。重要的事情说三遍

万能阴影布局-ShadowLayout

特点功能

任何view被包裹后即可享受阴影,以及系统shape,selector功能(清空项目drawable文件夹)。具体介绍如下:

支持定制化阴影:
    1. 随意修改阴影颜色值
    2. 阴影圆角:可统一设置圆角,也可对某几个角单独设置
    3. 阴影x,y偏移量
    4. 随意修改阴影扩散程度,即阴影大小
    5. 隐藏阴影:隐藏某边或多边阴影,或完全隐藏
    6. 可随意代码动态修改阴影
    
不止于阴影;系统shape功能:项目中shape、selector、ripple统统拥有。解放你的双手,清空项目drawable文件夹
    1. shape样式:pressed(按钮点击)、selected(按钮选择)、ripple(点击水波纹)
    2. 背景色设置
    3. stroke边框设置
    4. 渐变色背景色设置
    5. 按钮是否可被点击及不可点击背景
    6. 可绑定textView后,可伴随文案变化,可伴随文案颜色变化
    7. 支持设置图片背景,支持图片selector
    8. 可以剪裁子view,比如用到播放器之类的地方,想要各种不同的圆角时,ShadowLayout可以轻松解决
    

ShadowLayout动态

Demo

为录制流畅,截图分辨率比较模糊。可在下方扫描二维码下载apk,查看真机效果。

下载密码是:123456


效果展示

为录制流畅,截图分辨率模糊。可下载apk查看真机效果

  • 1.0功能展示

基础功能展示 各属性展示 随意更改颜色
Sample Sample Sample

  • 2.0功能更新

2.1.6新增shape,selector功能 2.1.7isSym属性对比 2.1.8单独更改某圆角大小
Sample Sample Sample

  • 3.0.1版本来袭

stroke边框及点击 shape及图片selector 组合使用
Sample Sample Sample

  • 3.1.0新增ripple及渐变色及3.1.1绑定textView

3.1.0渐变色及ripple 3.1.1绑定textView
Sample Sample

  • 3.3.1功能更新

增加虚线边框 单边虚线 边框和ripple共存
Sample Sample Sample

添加依赖

  • 项目build.gradle添加如下
    allprojects {
     	repositories {
     		maven { url 'https://jitpack.io' }
     	}
     }
  • app build.gradle添加如下
    dependencies {
            implementation 'com.github.lihangleo2:ShadowLayout:3.3.3'
    }

热门问题


基本使用

  • 一、阴影的简单使用

            <com.lihang.ShadowLayout
                android:id="@+id/mShadowLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                app:hl_cornerRadius="10dp"
                app:hl_shadowColor="#2a000000"
                app:hl_shadowLimit="5dp"
                >

                <TextView
                    android:id="@+id/txt_test"
                    android:layout_width="wrap_content"
                    android:layout_height="36dp"
                    android:gravity="center"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:text="圆角"
                    android:textColor="#000" />
            </com.lihang.ShadowLayout>

  • 二、stroke边框的简单使用

            <com.lihang.ShadowLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                app:hl_cornerRadius="10dp"
                app:hl_strokeColor="#000">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="36dp"
                    android:gravity="center"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:text="圆角边框"
                    android:textColor="#000" />
            </com.lihang.ShadowLayout>

  • 三、shape selector的简单使用

            <com.lihang.ShadowLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="10dp"
                app:hl_cornerRadius="30dp"
                app:hl_cornerRadius_leftTop="0dp"
                app:hl_layoutBackground="#F76C6C"
                app:hl_layoutBackground_true="#89F76C6C"
                app:hl_shapeMode="pressed">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="36dp"
                    android:gravity="center"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:text="selector的pressed用法,请点击"
                    android:textColor="#fff" />
            </com.lihang.ShadowLayout>

  • 四、图片 selector的简单使用

    <com.lihang.ShadowLayout
        android:id="@+id/ShadowLayout_shape"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        app:hl_cornerRadius="18dp"
        app:hl_cornerRadius_rightTop="0dp"
        app:hl_layoutBackground="@mipmap/test_background_false"
        app:hl_layoutBackground_true="@mipmap/test_background_true">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="36dp"
            android:gravity="center"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:text="图片selector"
            android:textColor="#fff" />

    </com.lihang.ShadowLayout>

如果你觉得麻烦,你还可以这样

            <com.lihang.ShadowLayout
                android:id="@+id/ShadowLayout_image"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="10dp"
                app:hl_layoutBackground="@mipmap/game_6_right"
                app:hl_layoutBackground_true="@mipmap/game_6_wrong"
                app:hl_shapeMode="pressed" />

  • 五、渐变色的简单使用

            <com.lihang.ShadowLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:hl_cornerRadius="18dp"
                app:hl_startColor="#ff0000"
                app:hl_endColor="#0000ff"
                >

                <TextView
                    android:layout_width="160dp"
                    android:layout_height="40dp"
                    android:gravity="center"
                    android:text="渐变色"
                    android:textColor="#fff" />

            </com.lihang.ShadowLayout>

  • 六、水波纹ripple的使用

            <com.lihang.ShadowLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:hl_cornerRadius="18dp"
                app:hl_shadowColor="#2a000000"
                app:hl_shadowLimit="7dp"
                app:hl_layoutBackground="#fff"
                app:hl_layoutBackground_true="#ff0000"
                app:hl_shapeMode="ripple"
                >

                <TextView
                    android:layout_width="160dp"
                    android:layout_height="40dp"
                    android:gravity="center"
                    android:text="水波纹"
                    />

            </com.lihang.ShadowLayout>

  • 七、绑定textView,伴随文案及颜色变化

		<com.lihang.ShadowLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:layout_marginTop="20dp"
                    app:hl_bindTextView="@+id/txt_press"
                    app:hl_cornerRadius="18dp"
                    app:hl_layoutBackground="#FF9800"
                    app:hl_layoutBackground_true="#ff0000"
                    app:hl_shapeMode="pressed"
                    app:hl_textColor_true="#fff"
                    app:hl_text="点我,press样式"
                    app:hl_text_true="我改变了文案了"
                    >

                    <TextView
                        android:id="@+id/txt_press"
                        android:layout_width="wrap_content"
                        android:layout_height="36dp"
                        android:gravity="center"
                        android:paddingLeft="10dp"
                        android:paddingRight="10dp"
                        android:text="点我,press样式"
                        android:textColor="#000" />

                </com.lihang.ShadowLayout>

  • 八、单条虚线、hl_shapeMode:dashLine的使用(以长边为宽度,短边为虚线width。由此可知,如下例子:为横向虚线)

                <com.lihang.ShadowLayout
                    android:id="@+id/ShadowLayout_line"
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    app:hl_strokeColor="#ff0000"
                    app:hl_shapeMode="dashLine"
                    app:hl_stroke_dashWidth="5dp"
                    app:hl_stroke_dashGap="5dp"
                    />

属性表格(Attributes)

一、关于阴影

name format description
hl_shadowHidden boolean 是否隐藏阴影(默认false)
hl_shadowColor color 阴影颜色值,如不带透明,默认透明16%
hl_shadowLimit dimension 阴影扩散程度(dp)
hl_shadowOffsetX dimension x轴的偏移量(dp)
hl_shadowOffsetY dimension y轴的偏移量(dp)
hl_shadowHiddenLeft boolean 左边的阴影不可见,其他3边同理
hl_shadowSymmetry boolean 控件区域是否对称(默认true)根据此图理解
Sample

二、关于圆角

name format description
hl_cornerRadius dimension 包括阴影圆角、shape圆角(dp)
hl_cornerRadius_leftTop dimension 左上圆角,其他角还是hl_cornerRadius值;同理其他3角(dp)

三、关于shape

  • 3.1、关于shape样式及背景色

name format description
hl_shapeMode enum 有4种模式:pressed和selected。和系统shape一样,以及ripple点击水波纹。新增dashLine
hl_layoutBackground reference/color 背景色,为false时展示:可以是颜色值,图片以及系统shape样式
hl_layoutBackground_true reference/color 背景色,为true时展示:可以是颜色值,图片以及系统shape样式

  • 3.2、关于stroke边框

name format description
hl_strokeWith dimension stroke边框线宽度
hl_strokeColor color 边框颜色值,为false展示
hl_strokeColor_true color 边框颜色值,为true展示
hl_stroke_dashWidth dimension 虚线边框的实线部分长度
hl_stroke_dashGap dimension 虚线边框的间隔宽度

  • 3.3、关于渐变色

name format description
hl_startColor color 渐变起始颜色(设置渐变色后,hl_layoutBackground属性将无效)
hl_centerColor color 渐变中间颜色(可不填)
hl_endColor color 渐变的终止颜色
hl_angle integer 渐变角度(默认0)

  • 3.4、关于绑定textView

name format description
hl_bindTextView reference 当前要绑定的textView的id
hl_textColor color shape为false是展示的文案颜色
hl_textColor_true color shape为true是展示的文案颜色
hl_text string shape为false时展示的文案
hl_text_true string shape为true时展示的文案

四、关于clickable

name format description
clickable boolean 设置ShadowLayout是否可以被点击;代码设置:mShadowLayout.setClickable(false);(默认true)
hl_layoutBackground_clickFalse reference/color Clickable为false时,要展示的图片或颜色。(此属性应当在app:hl_shapeMode="pressed"时生效)

方法表格(Method)

name format description
setShadowHidden() boolean 是否隐藏阴影
setShadowColor() color 设置阴影颜色值
setShadowLimit() dimension 设置阴影扩散区域
setOffsetX() dimension 设置阴影的X轴偏移量
setOffsetY() dimension 设置阴影的Y轴偏移量
setShadowHiddenTop() boolean 隐藏上边阴影(同理其他三遍)
setCornerRadius() dimension 设置圆角
setLayoutBackground() color 设置false时的背景颜色值
setLayoutBackgroundTrue() color 设置true时的背景颜色值
setStrokeColor() color 设置false时的边框颜色
setStrokeColorTrue() color 设置true时的边框颜色
setStrokeWidth() dimension 设置边框的粗细
setClickable() boolean 设置ShadowLayout是否可以点击
setSpecialCorner() integer 设置ShadowLayout四个角的大小
setGradientColor() integer 设置渐变颜色

赞赏

如果你喜欢 ShadowLayout 的功能,感觉 ShadowLayout 帮助到了你,可以点右上角 "Star" 支持一下 谢谢! ^_^ 你也还可以扫描下面的二维码~ 请作者喝一杯咖啡。或者遇到工作中比较难实现的需求请作者帮忙。

如果在捐赠留言中备注名称,将会被记录到列表中~ 如果你也是github开源作者,捐赠时可以留下github项目地址或者个人主页地址,链接将会被添加到列表中

捐赠列表


其他作品

RichEditTextCopyToutiao
mPro
SmartLoadingView

关于作者。

Android工作多年了,一直向往大厂。在前进的道路上是孤独的。如果你在学习的路上也感觉孤独,请和我一起。让我们在学习道路上少些孤独

  • QQ群: 209010674 android交流群(点击图标,可以直接加入)

Licenses

MIT License

Copyright (c) 2019 leo

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

More Repositories

1

RichEditTextCopyToutiao

android高仿今日头条富文本编辑
C++
430
star
2

mPro

共享元素小图到大图浏览,即recycleView到viewPager,pager左右滑动,共享动画item改变
Java
273
star
3

SmartLoadingView

一个自带dialog联网请求的button。且自带多种酷炫效果:有转场效果,和正常联网请求等。支持设置圆角;支持设置背景颜色值;设置字体颜色值;字体大小;自带dialog;字体超过一行,自动滚动(带2种滚动样式);通过对动画的不同监听可以实现不同的效果。具体看README
Java
269
star
4

ViewPager2Demo

关于封装ViewPager2的FragmentStateAdapter的封装,以最简单的方式实现抖音列表的上下加载,画廊效果,以及ViewPager2的各种封装
Kotlin
245
star
5

Happy-Android

使用玩Android api。实现一个RxJava + Retrofit + MVVM的项目。通俗易懂
C++
106
star
6

ImUIpro

仿微信im页面,带语音,带自定义表情
Java
94
star
7

AirRelationView

星空关系图谱
Java
84
star
8

SelfMVP

RxJava + Retrofit + MVP + Dagger2 基础框架(看完还不明白,吐槽我)
Java
81
star
9

Imgdots

在图片上做标签,图片可缩放
Java
38
star
10

EasyOk

EasyOk看的懂的okhttp封装,增强理解。支持在线缓存;支持离线缓存;支持断线重连;支持避免请求多次同一url;支持get请求;支持post请求;支持文件上传;支持文件下载及断点续传
Java
37
star
11

ChartView

一组针对统计图的自定义控件,高度定制化;折线图统计图提供了各项属性供用户定制,且带手势操作,有点像股票实线图。饼状统计图,同样提供了大量属性定制,可随意更改初始角度,添加item后会自动计算概率等等
Java
37
star
12

MoreAboutRecyclerView

这可能是最全关于recyclerView各种用法,其中也封装了基础的万能适配器,具体请看README
Java
31
star
13

HightCopyDetail

高仿药房网商品详情页面。效果流畅到你难以想象
Java
30
star
14

DataBindingLover

对DataBinding全面使用的Demo
Java
29
star
15

MyCamera

关于Android相机的自定义一些知识
Java
26
star
16

CaptureJz

一个多功能的自定义相机
Java
16
star
17

AACstu

MVVM组件AAC(Android Architecture Components) 学习demo
Java
13
star
18

TinkerDemo

微信热修复Tinker demo。30分钟不到,带你上路
Java
13
star
19

MyEmjkeyBoard

高仿微信软键盘,android系统表情转变ios表情,并支持自定义
Java
12
star
20

Dagger2Foru

关于Dagger2在java中详细使用介绍。Dagger2进阶:在Android中使用
Java
11
star
21

SmartViewPager2Adapter

关于封装ViewPager2的FragmentStateAdapter的封装,以最简单的方式实现抖音列表的上下加载,画廊效果,以及ViewPager2的各种封装
11
star
22

smartVpageAdapterlibrary

test
Kotlin
8
star
23

RecycleViewMoreAbout

recycleView侧滑删除,拖拽,删除动画,添加动画。以及横向阻尼效果
Java
7
star
24

CardScrool

卡片滑到详情,详情退出回到卡片
Java
6
star
25

official_web_copy_redbook

Bootstrap+jQuery+html5+css+javascript;原生开发官网,模仿小红书官网首页
HTML
5
star
26

More-AboutView

玩转自定义控件
Java
5
star
27

CutModuleStu

一个关于android(模块化/组件化)的demo
Java
4
star
28

SmallestWidthDemo

Android屏幕适配心德:1、最小宽度限定符;2、同时适配手机&平板;3、同时适配横竖屏切换
Java
4
star
29

easy-vue-element-admin

vue+element实现的一个简洁后台管理系统。基于vue3
Vue
3
star
30

Face-Recognition

利用camera api的一个人脸识别小demo
Java
3
star
31

My3DViewPager

画廊效果的viewpager
Java
2
star
32

RandomRecycleView

随机item个数的recycleView
Java
1
star
33

HarmoneyStudy

鸿蒙系统化学习
TypeScript
1
star
34

Taro_React_wx

Taro+React架构开发微信小程序
TypeScript
1
star
35

lihangleo2

1
star