我有一个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
?我错过了什么吗?