Как управлять размером графических ресурсов в мобильных приложениях с помощью ActionScript? - PullRequest
1 голос
/ 10 февраля 2012

Из-за плотности экрана iPhone, активы изображения развиваются больше. Таким образом, при указании значков и изображений для компонентов Flex принимает эту форму.

<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);
    }
}

Это когда изображение кажется взорванным. Что я делаю не так?

1 Ответ

1 голос
/ 10 февраля 2012

Ну, я думаю, что то, что вы пытаетесь сделать, может быть достигнуто с помощью следующего кода, это в основном сведет на нет работу, проделанную внутри, чтобы масштабировать ресурс на основе размера экрана, в то же время позволяя ему масштабировать другие компоненты, основанные на 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);

[Из документа API MultiDPIBitmapSource]

Этот класс предоставляет список растровых изображений для различных плотностей времени выполнения. Он поставляется в качестве источника для BitmapImage или Image и в виде значка кнопки. Компоненты будут использовать Application.runtimeDPI для выбора изображения для отображения.

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

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

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

...