Android无pading超简单超实用阴影解决方案

栏目: Android · 发布时间: 4年前

内容简介:这个迭代,UI在给了几张带阴影的图片,那种阴影范围很大,实际内容却只有一点的图片。效果类似这样。不知道这张图有没有表达清楚,就是那种图片之间阴影需要重叠才能使内容对其,阴影还有颜色的效果。

这个迭代,UI在给了几张带阴影的图片,那种阴影范围很大,实际内容却只有一点的图片。

效果类似这样。

Android无pading超简单超实用阴影解决方案

不知道这张图有没有表达清楚,就是那种图片之间阴影需要重叠才能使内容对其,阴影还有颜色的效果。

Android 5.0后才支持elevation属性,还不支持阴影颜色的设定。IOS同事笑了,他们说直接把阴影效果给他们,不要带阴影的图片,他们天然支持阴影,可以直接绘制。

于是,上网搜索,发现目前Andorid 平台实现阴影大概有这么几种方式

1、使用.9图 inloop.github.io/shadow4andr…

2、CardView 不支持阴影颜色

3、开源库ShadowLayout

4、模仿FloatingActionButton 实现阴影等等。

这些方式是可以实现阴影的显示,但是基本都是将阴影作为控件的一部分去实现的。这样,就需要给控件设置一些padding值,才能让阴影显示出来。这种方式使得布局很不方便对其。

我的解决方案

先上效果看看

Android无pading超简单超实用阴影解决方案

既然将阴影作为控件的一部分去实现不利于控件的布局和对其,那就咱就在ViewGroup里去实现阴影。绘制的时候根据子view的位置绘制出阴影,这样就不会影响控件的布局和对其了。

其实我觉得控件的阴影天然就应该在父布局去实现,就像现实中的阴影那样。

实现思路

1、继承ViewGoup

Android 中有FrameLayout、LinearLayout、RelativeLayout、ConstraintLayout等等,这些layout是为了进行子view布局而设计的,如果不进行背景色的设置,默认是不走ondraw方法的。

我们可以继承这些ViewGroup,设置setWillNotDraw(false)标志位强制进行绘制,这样我们就既拥有了布局的功能,也拥有了绘制的功能。然后就能在onDraw方法中,根据子view的位置绘制背景了。

2、复写onDraw方法绘制子view背景

这一步很简单,一个循环遍历子view就好了

如何绘制

1、绘制之前 需要设置 setLayerType(View.LAYER_TYPE_SOFTWARE, null)关闭硬件加速,因为一些高级绘制方法可能不支持硬件加速。

2、为paint设置 shadowLayer

paint.setShadowLayer(shadowLayoutParams.shadowRadius, shadowLayoutParams.xOffset
                            , shadowLayoutParams.yOffset, shadowLayoutParams.shadowColor);
复制代码

3、2那种绘制方式边缘有些整齐,可能会不满足需求。这里还有一种方式,为 Paint设置MaskFilter。 具体可以看看这篇文章 www.cnblogs.com/tianzhijiex…

我的实现

我个人比较喜欢使用ConstraintLayout等等,所以继承ConstraintLayout实现了一个demo,感觉效果还不错。

使用起来大概像这样。

Android无pading超简单超实用阴影解决方案

项目地址 github.com/ZhangHao555…

有没有更好的解决方式?


以上所述就是小编给大家介绍的《Android无pading超简单超实用阴影解决方案》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java解惑

Java解惑

布洛赫、加夫特 / 陈昊鹏 / 人民邮电出版社 / 2006-1 / 39.00元

本书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。 本书趣味十足、寓教于乐,适合于具备Java知识的学习者和有编程经验的Java程序员。一起来看看 《Java解惑》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具