创建形状需要哪些步骤,例如使用Canvas从头开始使用阴影的矩形?
在用于绘制矩形的绘画中添加阴影图层没有成功。
答案 0 :(得分:34)
不需要Bitmap,只需将图层类型设置为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);
}
}
答案 1 :(得分:6)
创建。路径,添加一些元素
将BlurMaskFilter设置为Paint
使用dx,dy阴影偏移
取消设置遮罩过滤器
再次绘制路径,没有。偏移
答案 2 :(得分:2)
我遵循了上面@pskink的想法,并找到了解决方案。 我将代码段放在这里供有需要的人使用。
如果您想知道什么是阴影属性,可以参考此测试器: https://okawa-h.github.io/box-shadow_tester/
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);
}
}