Flex:埋め込みアイコンを変更してボタンで使用しますか?
-
03-07-2019 - |
質問
それだけで、アイコンを埋め込む場合:
[Embed(source='icons/checkmark.png')]
private static var CheckMark:Class;
動的クラスになります。 setStyleメソッドを呼び出すことで、実行時にボタンにアイコンを簡単に割り当てることができます。
var btn:Button = new Button();
btn.setStyle("icon", CheckMark);
しかし、ボタンに割り当てる前に、アルファ値の変更やピクセルの再描画など、実行時にアイコンを変更したい場合はどうなりますか?
これまでのところ、満足のいく答えが見つかりません...
解決
これは私が見つけることができる唯一の答えです。ダイナミックアイコン < a href = "http://blog.xsive.co.nz/flex_source/button_icon_drawing/ButtonTest.html" rel = "nofollow noreferrer">(ソースを表示する例)
彼のソリューションには、カスタム「DynamicIcon」が含まれます。ボタンのアイコン設定で使用されるクラス、および動的アイコンを描画するためにButtonクラスに1つのメソッドを追加するカスタムButtonクラス。
最終結果は、BitmapDataをDynamicIconクラスに送信できることです。これはボタンに表示されます。そのため、必要に応じて画像を埋め込み、アセットクラスをインスタンス化し、ビットマップアセットを取得して変更し、ビットマップデータをアイコンに送信します。
これは興味深い問題であり、より簡単な解決策があるはずですが、これは多くの手間をかけずに機能します。
他のヒント
これを解決する方法は、アイコン自体を手動で描画するプログラムスキンクラスを実装することです。ボタンがアイコンを持っている場合でもアイコンを持っているかのように正しいサイズを計算するためには、おそらくもっと多くの作業が必要です。アイコンへの参照がどのように保存されているかを確認するには、ボタンのソースコードを確認する必要があります。
好きなことを正確に行うプログラムスキンを作成し、興味深いCSS宣言を使用して状態を変更するのが大好きです。たとえば:
button.setStyle("customIconAlpha", .4);
そしてもちろん、スキンまたはカスタムボタンクラスには次のものがあります:
var alpha:Number = getStyle("customIconAlpha") as Number;
(タイプキャストする必要があるかどうかわからない)
プログラムスキンで見つかった大きな問題は、ボタンが幅/高さの測定を拒否することです。それぞれのgetメソッドをオーバーライドすることで、これを簡単に回避できます。
オーバーライドpublic function get width():Number {return WIDTH; } public function get height():Number {return HEIGHT;をオーバーライドします。 }
私の場合、TabNavigatorでボタンを変更する必要があったため、ボタンをサブクラス化する簡単な方法はありませんでした。ありがたいことに、各スキンの親はボタンであるため、スキン内の静的メソッドを使用して、アイコンスキンが属するボタンのインスタンスを識別できます。
カバーオール「アイコン」を使用している場合スタイルを使用すると、状態ごとに新しいスキンオブジェクトが作成されます。そのため、アイコンの状態を変更するときは、このことに留意する必要があります。