2012-02-10 9 views
1

iPhoneの画面密度のため、画像アセットが大きくなります。そのため、Flexコンポーネントにアイコンやイメージを指定する場合は、このフォームを使用します。当然のActionScriptを使用してモバイルアプリでイメージアセットのサイズを管理するにはどうすればよいですか?

<s:ViewNavigator id="tab1" label="Tab1 width="100%" height="100%" firstView="views.Tab1"> 
     <s:icon> 
      <s:MultiDPIBitmapSource source160dpi="@Embed('assets/tabIcon.png')"/> 
     </s:icon> 
</s:ViewNavigator> 

Flexはこれを正しくレンダリングし、それがどうあるべきかにサイズを調整します。

しかし、自分でイメージを読み込むと、サイズが2倍に見えるように吹き上がって表示されます。

これは、タブバーをオーバーライドするときに使用します。

public class TabbedViewNavigatorTabBarSkin extends ButtonBarSkin 
{ 

    [Embed (source="/assets/tabBar.png")] 
    private var TabBarPng:Class; 

    override protected function createChildren():void 
    { 
     var bgb:Bitmap = new TabBarPng() ; 

     addChild(bgb); 
    } 
} 

画像がぼやけて表示されます。私は間違って何をしていますか?

+0

applicationDPIが設定されていますか。そうならば、FlexはapplicationDPI/runtimeの実際のDPIに基づいてすべてを拡大/縮小します。したがって、アプリケーションDPIが実際の実行時DPIよりも低い場合は、コンポーネントを拡大します。最初のケースでは、指定するものと実行時のDPIが何であるかに基づいて、使用する画像を具体的に選択するクラスを使用しています(スケーリングがないと思います)。他のケースでは、ビットマップを使用するように指示していますが、すでに適切に拡大/縮小されていることを指定していません... MultiDPIBitmapSourceを使用して、source160dpi = new TabBarPng()を設定することはできませんか? – shaunhusain

+0

私はあなたが何を意味しているか分かりません。このコードを投稿してください。それがうまくいくなら、私はそれを使うのが嬉しいです。それは良いアプローチのようです。そして、いいえ、私はアプリケーションDPIをどこにも特別に設定しませんでした。私の画像は72ppiと網膜のサイズです。 – Ska

+0

間違い、160に設定されています。 – Ska

答えて

1

これは、次のコードで達成できると思っています。これは基本的に、画面サイズに基づいてアセットを拡大縮小するために内部的に行われた作業を無効にしますDPIに基づいた他のコンポーネントは、実際にどのように再生されるのか正確にはわかりません。

 import mx.core.mx_internal; 

...

 var bgb : Bitmap = new TabBarPng(); 
     bgb.scaleX = 1/systemManager.mx_internal::densityScale; 
     bgb.scaleY = 1/systemManager.mx_internal::densityScale; 

かと思う別の可能性である:

 var mul : MultiDPIBitmapSource = new MultiDPIBitmapSource(); 
     mul.source160dpi = new TabBarPng(); 

     var bgb : BitmapImage = new BitmapImage(); 
     bgb.source = mul; 

     var gr : Graphic = new Graphic(); 
     gr.width = 100/systemManager.mx_internal::densityScale; //not sure if you'd want densityScale being applied here or what? Same below just a matter of testing on more devices 
     gr.height = 100/systemManager.mx_internal::densityScale; 
     gr.addElement(bgb) 
     addChild(gr); 

[MultiDPIBitmapSourceのAPIドキュメントから]

このクラスは、各種のためのビットマップのリストを提供ランタイム密度。 BitmapImageまたはImageのソースとして、ボタンのアイコンとして提供されます。コンポーネントはApplication.runtimeDPIを使用して、表示するイメージを選択します。

私はこの文書を考える:

http://help.adobe.com/en_US/flex/mobileapps/WS19f279b149e7481c682e5a9412cf5976c17-8000.html

はまだ、おそらくそれは、これは、異なるデバイス上で実行時にアプリケーションにどのように影響するかを完全には明らかではないのですけれども、あなたが見つける明確な説明です。最良の選択肢は、可能な限り多くのデバイスでテストすることです(サポートする必要があります)。

+0

ありがとうございました。 Flexデザインでは、はっきりとした見た目のようです。私はDPIのマネージャーなしで、デバイスをもっとテストしなければならないことがわかります。 – Ska

+0

applicationDPIはMXMLでのみ設定できます。 –

関連する問題