Android 在画布绘制的形状周围创建阴影?
使用画布从零开始创建形状(例如带阴影的矩形)需要哪些步骤 将阴影层添加到用于绘制矩形的绘画中没有成功Android 在画布绘制的形状周围创建阴影?,android,canvas,shape,shadow,Android,Canvas,Shape,Shadow,使用画布从零开始创建形状(例如带阴影的矩形)需要哪些步骤 将阴影层添加到用于绘制矩形的绘画中没有成功 创造。一个路径,向其中添加一些元素 将BlurMaskFilter设置为“绘制” 使用dx、dy阴影偏移绘制路径 未设置掩模滤波器 再次绘制一条没有偏移的路径 不需要位图,只需将图层类型设置为layer\u type\u SOFTWARE原始方法有效 public class TestShapeShadow extends View { Paint paint; public
不需要位图,只需将图层类型设置为
layer\u type\u 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的思想,找到了一个解决方案。 我把代码片段放在这里,供有需要的人使用 如果您想知道阴影属性是什么,可以参考此测试仪:
公共类MyViewWithShadow扩展了视图{
油漆;
int主色;
内阴影色;
//阴影属性
int offsetX=-25;
int offsetY=30;
整数半径=5;
公共MyViewWithShadow(上下文)
{
超级(上下文);
mainColor=Color.RED;
shadowColor=Color.BLACK;//此颜色也可以有alpha
油漆=新油漆(油漆.防油漆别名标志);
绘制.设置样式(绘制.样式.填充);
}
@凌驾
受保护的void onDraw(画布)
{
//为阴影创建绘画
绘制。设置颜色(阴影颜色);
paint.setMaskFilter(新的BlurMaskFilter(
模糊半径/*阴影半径*/,,
模糊maskfilter.Blur.NORMAL);
//在绘制对象之前绘制阴影
canvas.drawRect(20+offsetX,20+offsetY,100+offsetX,100+offsetY,paint);
//为主对象创建绘制
油漆。设置颜色(主颜色);
paint.setMaskFilter(空);
//绘制主要对象
画布.drawRect(20,20,100,100,油漆);
}
}
很好,但在xml中使用时遇到问题。必须将构造函数更改为TestShapeShadow(上下文上下文,属性集属性)
LAYER\u TYPE\u软件会降低性能。它在执行任何动画时都是可见的。如果没有LAYER_TYPE_软件,它将无法工作。setLayerType(LAYER_TYPE_软件,paint)此行将导致递归调用onDraw。你知道如何解决这个问题吗?在kotlin中,必要的行是:paint.setShadowLayer(12f,0f,0f,Color.YELLOW)你有什么例子吗?我们非常希望你能提供一些例子或代码片段。