我正在尝试创建一个自定义的 Shadow Drawable,如下图所示
这不是普通的材质阴影,首先它有更大的半径,并且在所有侧面(上、下、右、左)都有光晕效果。
我尝试过渐变,但它只有一个圆形半径,这在这里不起作用,因为这是矩形的。
我什至尝试将 CardView 提升到 100 DP,但显然提升是有限制的。
我在网上查找了一些解决方案,大多数都非常复杂且有限,而其他解决方案则涉及较旧的影子实现(回到Android 4.0)
知道如何实现这样的阴影吗?它是由设计师在 Adobe XD 中创建的。
我的方法是创建一个
ShapeDrawable
子类,因为我还需要绘制自定义形状。然后在绘制形状之前可以通过Paint.SetShadowLayer()
轻松调整阴影。我用 .NET/Xamarin 编写应用程序,因此示例是用 C# 编写的,但它与 Java 类似:
public class CustomShape : ShapeDrawable
{
readonly Path _path;
readonly Paint _paint;
public CustomShape(Color backgroundColor, Color shadowColor, int shadowRadius, int dx, int dy) : base()
{
_path = <create the desired shape's path here>
_paint = new Paint(PaintFlags.AntiAlias);
_paint.Color = backgroundColor;
_paint.SetShadowLayer(shadowRadius, dx, dy, shadowColor);
}
public override void Draw(Canvas canvas)
{
canvas.DrawPath(_path, _paint);
}
}
如果您需要更新形状或阴影,请使用
OnBoundsChange(Rect bounds)
而不是构造函数方法。
还有一个简单的添加描边的方法:只需用
Paint
创建一个单独的描边_strokePaint.SetStyle(Paint.Style.Stroke)
,然后在后台调用canvas.DrawPath(_path, _strokePaint)
后在Draw(Canvas canvas)
中调用DrawPath()
即可。