Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在画布绘制的形状周围创建阴影?_Android_Canvas_Shape_Shadow - Fatal编程技术网

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

使用画布从零开始创建形状(例如带阴影的矩形)需要哪些步骤

将阴影层添加到用于绘制矩形的绘画中没有成功

  • 创造。一个路径,向其中添加一些元素

  • 将BlurMaskFilter设置为“绘制”

  • 使用dx、dy阴影偏移绘制路径

  • 未设置掩模滤波器

  • 再次绘制一条没有偏移的路径


  • 不需要位图,只需将图层类型设置为
    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)你有什么例子吗?我们非常希望你能提供一些例子或代码片段。