Android 中的自定义阴影背景

问题描述 投票:0回答:2

我正在尝试创建一个自定义的 Shadow Drawable,如下图所示

这不是普通的材质阴影,首先它有更大的半径,并且在所有侧面(上、下、右、左)都有光晕效果。

我尝试过渐变,但它只有一个圆形半径,这在这里不起作用,因为这是矩形的。

我什至尝试将 CardView 提升到 100 DP,但显然提升是有限制的。

我在网上查找了一些解决方案,大多数都非常复杂且有限,而其他解决方案则涉及较旧的影子实现(回到Android 4.0)


知道如何实现这样的阴影吗?它是由设计师在 Adobe XD 中创建的。

android android-drawable
2个回答
0
投票

对于应根据屏幕尺寸进行缩放的复杂图像,我会将其导出为

PNG
,与图像中的外观完全相同,然后我将创建一个可调整大小的位图(9-补丁文件)


0
投票

我的方法是创建一个

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()
即可。

© www.soinside.com 2019 - 2024. All rights reserved.