在画布绘制的形状周围创建阴影



使用Canvas从头开始创建一个形状(例如带有阴影的矩形)需要哪些步骤?

在绘制矩形的油漆上添加阴影层没有成功。

不需要位图,只需要将层类型设置为LAYER_TYPE_SOFTWARE,原始方法就可以了。

public class TestShapeShadow extends View
{
    Paint paint;
    public TestShapeShadow(Context context)
    {
       super(context);  
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setShadowLayer(12, 0, 0, Color.YELLOW);
        // Important for certain APIs 
        setLayerType(LAYER_TYPE_SOFTWARE, paint);
    }
    @Override
    protected void onDraw(Canvas canvas)
    {   
        canvas.drawRect(20, 20, 100, 100, paint);
    }
}

我遵循@pskink答案中的想法,找到了解决方案。我把代码片段放在这里,供任何需要的人使用。

public class MyViewWithShadow extends View {
    Paint paint;
    int mainColor;
    int shadowColor;
    // shadow properties
    int offsetX = -25;
    int offsetY = 30;
    int blurRadius = 5;
    public MyViewWithShadow(Context context)
    {
        super(context);
        mainColor = Color.RED;
        shadowColor = Color.BLACK; // this color can also have alpha
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStyle(Paint.Style.FILL);
    }
    @Override
    protected void onDraw(Canvas canvas)
    {   
        // Create paint for shadow
        paint.setColor(shadowColor);
        paint.setMaskFilter(new BlurMaskFilter(
            blurRadius /* shadowRadius */,
            BlurMaskFilter.Blur.NORMAL));
        // Draw shadow before drawing object
        canvas.drawRect(20 + offsetX, 20 + offsetY, 100 + offsetX, 100 + offsetY, paint);
        // Create paint for main object
        paint.setColor(mainColor);
        paint.setMaskFilter(null);
        // Draw main object 
        canvas.drawRect(20, 20, 100, 100, paint);
    }
}

[链接现已断开:]

如果你想知道阴影属性是什么,你可以参考这个测试仪:https://okawa-h.github.io/box-shadow_tester/~

  1. 创建。a路径,添加一些元素到

  2. 将BlurMaskFilter设置为Paint

  3. 用dx,dy阴影偏移绘制路径

  4. 未设置掩码过滤器

  5. 用无偏移再次绘制路径

最新更新