2012-02-10 2 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, конечно, делает это правильно и подстраивает размер к тому, каким он должен быть.

Однако, когда я загружаю изображения самостоятельно, они выглядят взорванными, поскольку они выглядят двойными по размеру.

Это то, как я использую его при переопределении панели вкладок.

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

У вас есть прикладной набор параметров, если Flex будет масштабировать все на основе фактического DPI applicationDPI/runtime. Поэтому, если applicationDPI будет ниже фактического DPI, он увеличит ваши компоненты. В первом случае вы используете класс, который специально выбирает, какое изображение использовать в зависимости от того, что вы укажете, и от того, какой DPI времени выполнения (и я полагаю, что дальнейшее масштабирование не происходит). В другом случае вы просто говорите ему, что используете Bitmap, но не указали, что он уже масштабирован соответствующим образом ... не можете ли вы использовать MultiDPIBitmapSource и установить его source160dpi = new TabBarPng()? – shaunhusain

+0

Я не уверен, что знаю, что вы имеете в виду. Не могли бы вы разместить этот фрагмент кода? Если это работает, я более чем счастлив использовать его, это выглядит как хороший подход. И нет, я специально не устанавливал applicationDPI. Мои изображения - 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 или изображения и как значок кнопки. Компоненты будут использовать Application.runtimeDPI, чтобы выбрать, какое изображение будет отображаться.

Я думаю, что эта документация:

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

, вероятно, еще ярчайший объяснение вы найдете, хотя это не совсем понятно, как это повлияет на применение во время выполнения на различных устройствах. Лучший вариант - просто протестировать как можно больше устройств (или их нужно поддерживать).

+0

Спасибо за то, что погрузились в это. Похоже на еще одну вопиющую неряшливость в дизайне Flex. Я вижу, что мне придется обойтись без менеджера DPI и тестировать больше на устройствах. – Ska

+0

applicationDPI может быть установлен только в MXML. –

Смежные вопросы