写点什么

Android 布局阴影实现,移动开发框架 2019

用户头像
Android架构
关注
发布于: 19 分钟前

android:gravity="center"android:textSize="14sp"android:textColor="@color/colorBlack"android:layout_width="100dp"android:elevation="3dp"android:layout_height="80dp"/


效果也是不错,可以完成一些简单的阴影设置效果。



但需要注意些细节,不然 elevation 可能会无效:


  • 父布局要保留足够的空间,elevation 本身不占有 view 的大小

  • 需要设置背景色且不可设置为透明色

  • 不能设置是否为扩散的还是指定方向的

layer-list 伪阴影

为什么说是伪阴影呢,layer-list 本身很强大,器支持的层叠式绘制基本可以解决我们大多说的背景设计,对于一些要求不是很严格的阴影用它也不是不可以,但效果是真的不好,毕竟 shape 提供的层叠()并不支持模糊绘制(或者可以选择使用模糊背景图片绘制)。下面给一个用 layer-list 绘制的阴影做参考。


<TextViewandroid:id="@+id/shadow2"app:layout_constraintStart_toEndOf="@id/shadow1"app:layout_constraintTop_toTopOf="parent"android:layout_marginStart="50dp"android:layout_marginTop="20dp"android:text="layer-list 阴影"android:gravity="center"android:background="@drawable/shadow_layer"android:textSize="14sp"android:textColor="@color/colorBlack"android:layout_width="100dp"android:layout_height="80dp"/>


<item android:top="3dp"android:left="3dp"><shape android:shape="rectangle"><solid android:color="#333333"/><gradient android:startColor="#80ff0000"android:type="radial"android:centerX="0.5"android:centerY="0.5"android:gradientRadius="30"android:endColor="#10ff0000"/><size android:width="100dp" android:height="80dp"/></shape></item>


<item android:bottom="3dp"android:right="3dp"><shape android:shape="rectangle"><solid android:color="#fff"/><size android:width="100dp" android:height="80dp"/></shape></item>


</layer-list>


效果比较生硬,其本质就是颜色的渐变,如下:



还有如让 ui 切阴影背景图,但由于控件大小规格差异较大,风格差异较大,并不推荐使用。

自定义阴影布局

这是我比较推荐的方式,可参考 CardView 的阴影实现自定义一个阴影布局实现。其实现是通过 setShadowLayersetMaskFilter 实现。


// mPaint.setShadowLayer(blur


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


Radius,0,0,shadowColor);if (blurRadius>0){mPaint.setMaskFilter(new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.NORMAL));}


相较于 setShadowLayer 来说,setMaskFilter 可供选中的实现方式要多一个 blur 实现类型,效果更好些,所以我是通过使用 setMaskFilter 来实现自定义阴影布局。


<cn.enjoytoday.shadow.ShadowLayoutandroid:id="@+id/shadow3"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/shadow1"android:layout_marginTop="20dp"android:text=""app:shadowRadius="0dp"app:shadowColor="#333"app:blurRadius="5dp"app:xOffset="0dp"app:yOffset="0dp"android:layout_marginStart="15dp"android:gravity="center"android:background="@drawable/shadow_layer"android:textSize="14sp"android:textColor="@color/colorBlack"android:layout_width="wrap_content"android:layout_height="wrap_content">


<TextViewandroid:padding="5dp"android:text="自定义应用布局"android:gravity="center"android:textSize="14sp"android:textColor="@color/colorBlack"android:layout_width="100dp"android:layout_height="80dp"/>


</cn.enjoytoday.shadow.ShadowLayout>

使用

[ShadowView](


) 托管于 GitHub, 仿照 css 的 Box Shadow 的阴影实现效果设计实现,可通过设置水平、竖直偏移确认阴影方向,可设置模糊半径和圆角半径、阴影颜色等。可通过 gradle 直接依赖使用:

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android 布局阴影实现,移动开发框架2019