我想创建一个快照,它以不同于向用户显示的方式组成多个组件。
假设屏幕上的布局如下所示:
<s:VGroup>
<s:HGroup id="dynamicPopulatedGroup" />
<mx:TabNavigator id="tabs">
<s:NavigatorContent> <mx:LineChart id="chart1"/> </s:NavigatorContent>
<s:NavigatorContent> <mx:LineChart id="chart2"/> </s:NavigatorContent>
</mx:TabNavigator>
<mx:Legend id="legend" />
<s:Button id="bSnapshot" />
</s:VGroup>
但是“屏幕截图”应该像这样布置:
<s:VGroup>
<s:Label>Some Title Text</s:Label>
<mx:LineChart>The currently selected tab's chart</mx:LineChart>
<s:HGroup>
<s:HGroup id="dynamicPopulatedGroup" />
<mx:Legend id="legend" />
</s:HGroup>
</s:VGroup>
这是一个简化的示例,但它说明了我要解决的主要问题,即如何在沙箱中操作可视元素而不影响屏幕上的元素本身。
我试图通过创建一个新Group
组件并在代码中添加各种组件,然后截取屏幕截图来做到这一点。然而,这实际上从可视树中的原始位置删除了组件。一旦完成运行,整个组件就会损坏。 是不是我需要先创建这些组件的副本?
var g:VGroup = new VGroup();
// label
var l:Label = new Label(); l.text = "some title";
g.addElement(l);
// chart
g.addElement(NavigatorContent(tabs.selectedChild).getElementAt(0)); // chart
// legend, etc.
var hgrp:HGroup = new HGroup(); hgrp.addElement(dynamicPopulatedGroup); hgrp.addElement(legend);
g.addElement(hgrp);
ImageSnapshot.captureBitmapData(g);
// then do stuff with bitmap...