JavaFX如何实现线段从起点到终点的绘制动画并永久保留线段?
实现方案
方案1:基于现有代码最小改动实现需求
你的现有代码中Path默认没有配置描边样式,也没有做显示进度的动画,按照以下步骤修改即可:
- 首先给
Path设置和圆形一致的描边颜色、宽度,关闭填充:
path.setStroke(Color.YELLOW); path.setStrokeWidth(2); // 可根据需求调整宽度 path.setFill(null);
- 新增描边进度动画,和
PathTransition时长同步,实现「圆形走到哪里,路径显示到哪里」的绘制效果:
// 计算路径总长度 double pathLength = Stroker.strokeShape(path, new BasicStroke(1)).getBoundsInLocal().getWidth(); // 给路径设置虚线数组,总长度等于路径长度 path.getStrokeDashArray().setAll(pathLength, pathLength); // 初始偏移设为路径总长度,此时路径完全隐藏 path.setStrokeDashOffset(pathLength); // 新增描边显示动画 Timeline drawAnim = new Timeline( new KeyFrame(Duration.millis(1000), new KeyValue(path.strokeDashOffsetProperty(), 0) ) );
- 同步两个动画的播放即可,如果不需要循环绘制,把原来的
INDEFINITE改成1次,动画结束后路径会永久保留:
transicion.setCycleCount(1); transicion.play(); drawAnim.play();
如果需要循环播放绘制效果,给两个动画都设置INDEFINITE即可,路径会重复隐藏再绘制。
方案2:更灵活的永久线段绘制方案
如果你的需求是支持累积绘制多条线段(比如绘制完一条再画下一条,所有绘制过的线段都保留),更推荐直接用Timeline实现画笔轨迹绘制:
- 维护一个全局的
Pane作为绘制画布,所有生成的路径都添加到这个画布上 - 每次启动绘制时动态生成新的
Path和圆形画笔,动态更新Path的点位和圆形的位置 - 绘制完成后只隐藏圆形,路径永久留在画布上即可,还可以支持撤销、修改颜色等扩展功能
内容的提问来源于stack exchange,提问作者alex angulo
相关产品推荐
相关产品推荐

