gpt4 book ai didi

安卓路径 : Merge several paths and draw text on merged path

转载 作者:行者123 更新时间:2023-11-29 22:01:40 26 4
gpt4 key购买 nike

在我的应用程序中,我必须合并几个短路径以创建一个更大的路径。示例:

Path p1 = new Path();
Path p2 = new Path();
p1.moveTo(0,0); p1.lineTo(200,200);
p2.moveTo(200,200); p2.lineTo(400,0);

p1.addPath(p2); //merge

Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLACK);

canvas.drawColor(Color.WHITE);
canvas.drawPath(p1, paint);

这工作得很好,在 Canvas 上绘制了一个整洁的 V 形。

但是,如果我想使用合并路径进行文本渲染(使用 Canvas.drawTextOnPath()),它只会沿着路径的第一部分绘制文本(即原始 p1 )。不过,我想使用整个路径进行文本渲染。那么有什么办法可以实现吗?

最佳答案

我自己想出来了...所描述的行为似乎是 known issue .我猜这是因为每条路径在内部都被视为一个单独的“轮廓”,无法与另一条路径合并。

但是我能够通过简单的“hack”获得所需的行为。不过,这仅适用于基于线的路径。这是代码(最小示例),如果有人感兴趣的话......

public class MyPath extends Path {

private ArrayList<Float> points = new ArrayList<Float>();

public void addPath(MyPath src) {
this.points.addAll(src.getPoints());
super.rewind();
super.moveTo(this.points.get(0), this.points.get(1));
for (int i = 2; i < this.points.size(); i += 2) {
super.lineTo(this.points.get(i), this.points.get(i+1));
}
}

@Override
public void moveTo(float x, float y) {
this.points.add(x);
this.points.add(y);
super.moveTo(x, y);
}

@Override
public void lineTo(float x, float y) {
this.points.add(x);
this.points.add(y);
super.lineTo(x, y);
}

public ArrayList<Float> getPoints() {
return this.points;
}

}

这个的用法很简单:

MyPath p1 = new MyPath();
MyPath p2 = new MyPath();
p1.moveTo(0,0); p1.lineTo(200,200);
p2.moveTo(200,200); p2.lineTo(400,0);

p1.addPath(p2); //merge

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
paint.setTextSize(40);

canvas.drawColor(Color.WHITE);
canvas.drawTextOnPath("Lorem ipsum dolor sit amet", p1, 0, 0, paint);

关于安卓路径 : Merge several paths and draw text on merged path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11767124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com