使用Batik在运行时修改SVGAnimateElement

时间:2014-12-12 08:09:35

标签: java svg batik svg-animate

我有一个SVG文档,我在JSVGCanvas中显示。用户可以通过拖动它们周围的矩形来选择一堆元素。我试图想象这些元素的选择。 我想让他们在被选中时眨眼。但是,在每个选择上添加新SVGAnimateElement的速度太慢了。 Batik将几乎永远使用100%的CPU时间。

因此,我考虑在文档加载时准备软管SVGAnimateElement,并在选择时“激活”它们。这是一个例子:

<g id="someId">
        <line ... />
        <line ... />
        <animate dur="0" from="0" to="1" repeatCount="indefinite"
                 attributeName="stroke-opacity" 
                 calcMode="discrete"/>
        <animate dur="0" from="0" to="1" repeatCount="indefinite"
                 attributeName="fill-opacity"
                 calcMode="discrete"/>
</g>

由于dur为0,因此没有可见的闪烁。在选择时,我将dur的值设置为1以使闪烁可见:

canvas.getUpdateManager().getUpdateRunnableQueue().invokeLater(new Runnable() {
  public void run() {
    for (SVGElement elm : currentlySelectedElements) {
      elm.setAttributeNS(null, "stroke", "green");
      Set<SVGAnimateElement> animateElements= getAnimateElements(elm);
      for (SVGAnimateElement anim : animateElements) {
        anim.setAttributeNS(null, "dur", "1");
      }
    }
  }
}); 

可以看到笔触颜色的变化。对SVGAnimateElement的更改不可见。更改repeatCount也不起作用。

是否有理由不能在运行时修改SVGAnimateElement?我错过了什么吗?

0 个答案:

没有答案