既存のコンポーネントに基づいているが、特定の状況でこの既存のコンポーネントの上にオーバーレイを描画するカスタム MXML コンポーネントを flex で作成するにはどうすればよいでしょうか。
理想的には、新しいコンポーネントは既存のコンポーネントに基づく (派生する) べきであり、既存のコンポーネントのオカレンスを新しいコンポーネントと交換できるようにする必要があります。
新しいコンポーネントで updateDisplayList() をオーバーライドし、this.graphics を使用してオーバーレイをペイントしようとしました。これにより、既存のコンポーネントの子の下にオーバーレイが描画されました。また、同様の結果につながるレンダリングイベントを受け取ったときに描画を試みました。
オーバーレイの表示をトリガーする外部条件が変化したら、新しいコンポーネントで invalidateDisplayList() を呼び出します。これは、上記の両方のケースで描画をトリガーするために機能します。残りの問題は、他のすべてのコンポーネントが追加されたら、それらの上に描画する方法を理解することです。
次の例は、私が何をしようとしたかを示しています。overlayEnabled が設定され、コンポーネントの invalidateDisplayList() メソッドが呼び出されると、赤い四角形が背景に描画されます....
// NewComponent.mxml
<ExistingComponent ...>
<mx:Script>
...
public var overlayEnabled:Boolean;
override protected updateDisplayList(...) {
super.updateDisplayList(...)
if (overlayEnabled) {
var g:Graphics = this.graphics;
g.beginFill(0xFF0000, 0.5);
g.drawRect(0, 0, width, height);
g.endFill();
}
}
...
</mx:Script>
</ExistingComponent>
また、さまざまなアプローチを自由に提案してください。