Android 布局阴影实现,移动开发框架 2019
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 的阴影实现自定义一个阴影布局实现。其实现是通过 setShadowLayer、setMaskFilter 实现。
// mPaint.setShadowLayer(blur
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 直接依赖使用:
评论