ユーザーに表示される方法とは異なる方法で複数のコンポーネントを構成するスナップショットを作成したいと考えています。
画面上のレイアウトが次のようになっているとします。
<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...