2011-06-23 10 views
0

Adob​​e Flex 4.5を使用してタブレット用の画像ビューアアプリケーションをコーディングしています。基本的には、リスト内のイメージをレンダリングするカスタムアイテムレンダラーのリストがあります。私は、画像サイズをポートレート(600x1024)のタブレットデバイスの幅/高さに設定しました。この方法では、一度に1つの画像しか見ることができません。問題は、デバイスがランドスケープに向かうときに、このデザインが明らかにネジ止めされることです。私の質問は、一度に1つの画像だけが表示されるように向きが変わったときに、画像の幅/高さを自動的に変更する方法です。それとも、これに接近するより良い方法がありますか?Flexの画像リスト上の1つの画像を、縦向きと横向きの両方で一貫して表示します。

これが私のリストです:

<s:List width="600" height="1024" 
     id="imageList" dataProvider="{data}" itemRenderer="{inlineRenderer}" click="imageList_clickHandler(event)" 
     verticalScrollPolicy="off" useVirtualLayout="true"> 
    <s:layout> 
     <s:HorizontalLayout columnWidth="600"/> 
    </s:layout> 
</s:List> 

これは、アイテムレンダラーです:ここで

<s:Scroller width="600" height="1024"> 
       <s:Group> 
        <s:Image source="{data.imageurl}" width="600" height="1024" 
            contentLoader="{FlexGlobals.topLevelApplication.imageCache}"/> 
       </s:Group> </s:Scroller>    
+0

ここでは間違っています。レンダラーにスクロールバーが必要なのはなぜですか?レンダラー(およびリスト)の明示的な高さと幅を指定するのはなぜですか?これはほとんどの場合、クロスデバイスではありません。モバイル機器向けのMXMLレンダラーの使用は推奨されません。レンダラでのバインドはパフォーマンスにとっては恐ろしいものです。これはモバイルデバイス上で重要です。一度に1つのアイテムだけを表示する予定の場合は、なぜリストを使用していますか? 1つの画像を使用し、ユーザーがリストをスクロールするときにソースを変更するだけです。 – JeffryHouser

+0

あなたの質問に関しては、画像のアスペクト比を維持し、向きが変わったときに高さと幅の値を変更するだけでよいでしょう。 – JeffryHouser

+0

@ www.Flextras.com画像を拡大してスクロールできるようにズームジェスチャーを使用したいので、私はスクロールを使用しています。複雑なリストではなく、イメージだけに変更します。ドキュメントでは、リストには表示されていない他のコンポーネントは表示されないため、パフォーマンスに関する問題はないと思っています。私はハードコーディングの幅/高さが悪い設計を知っている、私はパーセントを使用している必要があります。また、レンダラーの代わりに何をお勧めしますか?バインディングを避ける方法を教えてください。 – peacey

答えて

2

は自動的に向きの変更を処理した画像のみのアイテムレンダラーを作成する方法の例です。

<s:List id="list" width="100%" height="100%"> 
    <s:dataProvider> 
     <s:ArrayList> 
      <fx:String>http://www.google.com/images/logos/ps_logo2.png</fx:String> 
      <fx:String>http://www.google.com/images/logos/ps_logo2.png</fx:String> 
      <fx:String>http://www.google.com/images/logos/ps_logo2.png</fx:String> 
      <fx:String>http://www.google.com/images/logos/ps_logo2.png</fx:String> 
      <fx:String>http://www.google.com/images/logos/ps_logo2.png</fx:String> 
     </s:ArrayList> 
    </s:dataProvider> 
    <s:itemRenderer> 
     <fx:Component> 
      <s:ItemRenderer width="{outerDocument.list.width}" 
          height="{outerDocument.list.height}"> 
       <fx:Script> 
        <![CDATA[ 
         import spark.core.ContentCache; 
         [Bindable] 
         public static var imageCache:ContentCache = new ContentCache(); 

         override public function set data(value:Object):void { 
          super.data = value; 
          bitmapImage.source = data; 
         } 
        ]]> 
       </fx:Script> 
       <s:BitmapImage id="bitmapImage" contentLoader="{imageCache}" width="100%" height="100%" /> 
      </s:ItemRenderer> 
     </fx:Component> 
    </s:itemRenderer> 
</s:List> 

それはいくつかの簡単な最適化ルールを(http://flexponential.com/2011/04/20/flex-performance-tips-tricks/を参照)以下のため、このレンダラはかなりよく、それはMXMLで記述されていてもカントー実行する必要がありますが、あなたはそれがOKな感じを確認するために、アプリケーションでそれをテストしたいと思います。

一般に、Adobeは、最高のパフォーマンスを得るために、LabelItemRendererまたはIconItemRendererを拡張することにより、ActionScriptでアイテムレンダラーを記述することをお勧めします。上記のレンダラーが十分に高速でない場合は、https://bugs.adobe.com/jira/browse/SDK-30043をチェックして、現在の問題の説明と、IconItemRendererでこれを行う回避策を確認してください。

関連する問題