android 中 PathEffect 的处理问题
我要画出一块由不规则path
组成的区域,并且这个path
因为视觉效果需要设置圆角,我就通过Paint.setPathEffect(new CornerPathEffect(300));
给设置了圆角,但是在通过这个path
组合成区域的时候因为这个圆角的设置整个区域都有圆角的效果了,这不是我想要的。
如图,黑色是我的path
,红色是我设置了圆角的由path
组成的区域。四个角落都有了圆角的效果,这不是我想要的。
而蓝色区域是未设置圆角的,此时path
一侧的区域就不符合标准了。
以下是我的全部代码
public class PathEffectView extends View {
private Path line;
private Paint linePaint;
private Path range;
private Paint rangePaint;
private final Paint paint3;
public PathEffectView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
linePaint.setStrokeWidth(10);
linePaint.setColor(Color.BLACK);
linePaint.setStyle(Paint.Style.STROKE);
linePaint.setPathEffect(new CornerPathEffect(300));
rangePaint = new Paint(linePaint);
rangePaint.setColor(Color.BLUE);
rangePaint.setStyle(Paint.Style.FILL);
paint3 = new Paint(linePaint);
paint3.setColor(Color.RED);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
line = new Path();
range = new Path();
line.moveTo(0,1000);
line.rLineTo(200,-150);
line.rLineTo(200,300);
line.rLineTo(200,-350);
line.rLineTo(200,320);
line.rLineTo(200,-370);
line.lineTo(w,800);
range.addPath(line);
range.lineTo(w,h);
rangePaint.setPathEffect(null);
range.lineTo(0,h);
range.close();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.translate(0,-20);
canvas.drawPath(line, linePaint);
canvas.restore();
canvas.drawPath(range, rangePaint);
canvas.drawPath(range,paint3);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过
Paint
的getFillPath(src,dst)
方法可以获得转换后的path
然后用新的path
来进行区域的填充。详见 hencoder
2.8.1