我正在尝试使用Android Path类创建“发光”效果.但是,渐变不会扭曲以适应路径.相反,它只是显示在“上方”并剪切到路径的笔划.使用方形路径,下面的图像显示了我的意思:
相反,它看起来应该更像这样:
换句话说,渐变遵循路径,特别是根据CornerPathEffect中设置的半径包围角落.
以下是代码的相关部分:
paint = new Paint();
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(20);
paint.setAntiAlias(true);
LinearGradient gradient = new LinearGradient(30, 0, 50, 0,
new int[] {0x00000000, 0xFF0000FF, 0x00000000}, null, Shader.TileMode.MIRROR);
paint.setShader(gradient);
PathEffect cornerEffect = new CornerPathEffect(10);
paint.setPathEffect(cornerEffect);
canvas.drawPath(boxPath, paint);
有任何想法吗?
另一种方法是在定义笔划宽度时获得“软边刷”效果.我已经尝试过BlurMaskFilters,但是那些会产生统一的模糊,而不是从不透明到透明的过渡.有谁知道这是否可能?
解决方法:
用软刷位图绘制怎么样?使用像Photoshop这样的图像编辑软件,制作一个柔和的圆形刷,其不透明度径向向外减小保存为可绘制,将其加载到位图中,并沿着路径均匀地绘制它.用白色画笔制作位图.这样,您可以使用PorterDuffColorFilter简单地将给定颜色(此处为蓝色)乘以您的位图.
brush1=BitmapFactory.decodeResource(getResources(), R.drawable.brush_custom_one);
//This contains radially decreasing opacity brush
porter_paint.setColorFilter(new PorterDuffColorFilter(paint.getColor(), Mode.MULTIPLY));
for (int i=1;i
//matrix contains evenly spaced points along path
Point point = matrix.get(matrix.get(i));
canvas.drawBitmap(brush1, point.x,point.y, porter_paint);}
使用的刷子是(它在那里):
最终结果是:
标签:android,graphics,shader,path,gradient
来源: https://codeday.me/bug/20190726/1542580.html