Java 设置Path2D图形的动画
我正在创建一个程序,让用户在屏幕上画画,就像在MS paint中使用铅笔工具一样,然后允许用户重播创建图形的过程,就像有人在你面前画画一样 我使用Path2D完成此操作的方法,以及通过moveTo和lineTo方法,使用路径绘制一条线 我现在似乎不知道如何设置Path2D对象重画的动画。我当前的策略是创建一个新的路径2D,并使用PathIterator,迭代地将线段从旧路径添加到新路径 这就是我目前的想法:Java 设置Path2D图形的动画,java,swing,drawing,path-2d,Java,Swing,Drawing,Path 2d,我正在创建一个程序,让用户在屏幕上画画,就像在MS paint中使用铅笔工具一样,然后允许用户重播创建图形的过程,就像有人在你面前画画一样 我使用Path2D完成此操作的方法,以及通过moveTo和lineTo方法,使用路径绘制一条线 我现在似乎不知道如何设置Path2D对象重画的动画。我当前的策略是创建一个新的路径2D,并使用PathIterator,迭代地将线段从旧路径添加到新路径 这就是我目前的想法: public void redrawPath() { Path2D oldPat
public void redrawPath() {
Path2D oldPath = path;
path = new Path2D.Double();
double[] coords = new double[100];
PathIterator pi = oldPath.getPathIterator(new AffineTransform());
while (!pi.isDone()) {
pi.next();
pi.currentSegment(coords);
//Add segment to new path
repaint();
}
}
主要问题是我不知道线段的大小,所以我不知道如何调整coords数组的大小。我还没有完全弄清楚如何将这些段添加到新路径中。似乎可以使用Path2D中的append方法,尽管它似乎可以将整个路径添加到自身中
我意识到Path2D是一个形状,但我似乎找不到任何替代方法来实现这一点。您可以使用FlattingPathIterator对形状和处理段进行PAS处理 请参见此处的移动点示例 我刚刚发现其中包含一个非常有用的示例 原来我读错了api。坐标数组的最大大小只能为7 为了让它工作,我还必须使用SwingWorker在后台更新路径。redrawPath()只是启动线程 SwingWorker的doInBackGround中的代码如下所示:
PathIterator pi = oldPath.getPathIterator(null);
while (!pi.isDone()) {
double[] coordinates = new double[6];
int type = pi.currentSegment(coordinates);
switch (type) { //Decide what do based on type of segment
case PathIterator.SEG_MOVETO:
tempPath.moveTo(coordinates[0], coordinates[1]);
break;
case PathIterator.SEG_LINETO:
tempPath.lineTo(coordinates[0], coordinates[1]);
break;
default:
break;
}
publish(tempPath.clone());
pi.next();
}
process方法更新画布上的路径并调用repaint() 我刚刚发现它包含了一个非常有用的例子。我才意识到我是在装傻,把api看错了。坐标数组的最大大小只能为坐标[6]。现在调用repaint没有任何作用,所以我想我必须使用一个助手线程在后台更新路径。