1

好奇心から、私はフレックスアプリのすべての部分(一般的にはアプリのごく一部です)を最適化するように努力しています。現在、すべてのボタン/スキンの最適化に取り組んでいます。使用しているいくつかのボタンと、それらを生成するために使用しているサンプルコードをいくつかリンクしました。

これをより効率的で使いやすく、全体的に改善する方法についてアドバイスしてください。ありがとう!

最初のボタン、アイコン、灰色の背景2番目と3番目のボタン、背景は異なりますがアイコンはありません4番目のボタン、最初のボタンと同様、異なる色アイコンはあるが背景がないボタン

ご覧のとおり、ボタンはかなり異なる場合がありますが、ルックアンドフィールは似ています。現在、次のように設定して「ステートフルスキン」を作成しています。

skin: ClassReference('com.mysite.assets.skins.NavigationButtonSkin');

次に、NavigationButtonSkinは次のようになります。

public class NavigationButtonSkin extends UIComponent {

  // imports, constructor, etc

  protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {

    // initialize fillColors, fillAlphas, roundedCorners, etc

    switch( name ){
      case 'upSkin':
      fillColors = [getStyle('backgroundColor'),getStyle('backgroundColor2')];      
      break;
      // do the same for overSkin, downSkin, disabledSkin, etc
    }

    // use this.graphics to draw background
    // use this.graphics to draw border on top of background

  }

}

簡単な部分のいくつかをコメントアウトしましたが、これがこれを行うのに悪い/非効率的な方法であるかどうか、そしてどのように改善するかを教えてください。

ありがとう!

4

2 に答える 2

4

パフォーマンスに関しては、スキンがUIComponentではなくProgrammaticSkinから継承する方がよいでしょう。ProgrammticSkin自体はShapeを継承し、verticalGradientMatrix、drawRoundRect、...などのスキニング用のユーティリティメソッドを提供します。

あなたのコードを見て言えることはそれだけです。

良い点は、bitmap/swfベースのスキンの代わりにプログラムスキンを使用することです。

于 2011-04-20T14:09:33.507 に答える
0

さて、私はあなたがこれで得ているところに到達していません。あなたはそれを正しくやっているかどうか知りたいだけですか?あなたがボタンのcssに追加されていると思いますが、これは良いことですが、なぜあなたがすべてをActionscriptで行っているのかskin: ClassReference('com.mysite.assets.skins.NavigationButtonSkin');わかりません。非効率的で、本質的にmxmlレイアウトのすべての機能とCatalystのサポートが失われているようです(将来必要になった場合)。

Flash Builderでスキンを作成してみてください。デフォルトのボタンスキンを使用してMXMLが作成され、好きなように編集できます。また、actionscriptよりもmxmlを使用して、状態ベースの設計を行う方がはるかに簡単です。そこから変更し、ボタンの種類ごとに個別のスキンを用意する必要があります。

編集:ああ、くだらない、これがFlex 3だとは思わなかった...プログラムを入手してください;)フロリアンが言ったことを聞いてください。

于 2011-04-20T14:11:44.163 に答える