Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Постоянный бэкграунд во View (http://www.flasher.ru/forum/showthread.php?t=176380)

Light 08.03.2012 21:00

Постоянный бэкграунд во View
 
Коллеги, у меня возникла такая проблема - View Based Application при переходе с одного вью на другой не сразу загружает бэкграунд (Image, растянутый на всю сцену). Т.е. при переходе не следующий вью долю секунды сначала показывается белый экран с элементами управления и лишь затем загружается рисунок в Image. Выглядит ужасно - надо чтобы рисунок был сразу. В компоненте View не нашел свойства background image, сделал destructionPolicy = never, в надежде что картинка не уничтожится, но нет - все равно белый экран мелькает при старте вью... Что делать???

PS. изображение Embed - не помогает

alatar 11.03.2012 13:21

Если бэкграунд один на всех, то сделайте скин для вашего Application, если для всех разный, то (и) для каждого View.

Light 12.03.2012 03:49

alatar, спасибо, но при смене ориентации устройства, бекграунд, добавленный таким способом, не меняется...

PS. Я пытаюсь сделать as-скин, бекграунд загружаю лоадером. Кто-нибудь может подсказать, как сделать чтобы loader в скине изменялся при смене ориентации устройства? Простые способы уже перепробовал: всевозможные Listener'ы StageOrientationEvent'ов не работают в скинах.

PPS. А когда делаю mxml-скин и делаю там бекграунд с помощью image - вообще волшебство какое-то - все компоненты на сцене исчезают! Бекграунд вроде меняется нормально, но все остальное кроме бекграунда и верхней панели не видно! Так что пытаюсь сделать as-скин, он хотя бы не заставляет остальные компоненты исчезать

Astraport 12.03.2012 10:09

Цитата:

Кто-нибудь может подсказать, как сделать чтобы loader в скине изменялся при смене ориентации устройства? Простые способы уже перепробовал: всевозможные Listener'ы StageOrientationEvent'ов не работают в скинах.
Попробуйте сделать в приложении два state - portrait и landscape (именно такие названия). И для бэкграунда сделайте разные source для каждого state.

При переходе с одного вью на другой можно попробовать поменять вид transition и время воспроизведения.

Light 12.03.2012 18:37

Astraport, у loader нет source. И я не знаю как сделать различные states из actionscript-скина. В MXML-скинах это легко, но я уже говорил, что когда я применяю mxml-скин к view, все элементы управления таинственным образом исчезают... Поэтому хочу сделать actionscript-скин.

Извиняюсь если это нубские вопросы... Я только недавно перешел из чистого as3 на flex, многое непонятно пока.

Astraport 12.03.2012 19:06

Давайте код что ли как это исчезают элементы управления.

Light 12.03.2012 19:22

Вот код mxml-скина
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
                xmlns:s="library://ns.adobe.com/flex/spark">
        <!-- host component -->
        <fx:Metadata>
                [HostComponent("spark.skins.mobile.SkinnableContainerSkin")]
        </fx:Metadata>
 
        <!-- states -->
        <s:states>
                <s:State name="disabled" />
                <s:State name="normal" />
        </s:states>
 
        <s:Image left="0" right="0" top="0" bottom="0" scaleMode="zoom"
                        smooth="true" source="assets/mainfon2.jpg"/>
 
        <!-- SkinParts
        name=contentGroup, type=spark.components.Group, required=false
        -->
</s:Skin>

Добавляется этот скин вот таким образом:
Код AS3:

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
                xmlns:s="library://ns.adobe.com/flex/spark"
                creationComplete="view2_creationCompleteHandler(event)"
                overlayControls="false" skinClass="skins.MainViewMXMLSkin" title="Title" addedToStage="view1_addedToStageHandler(event)">

Если таким же точно образом добавить actionscript-скин, элементы управления не пропадают, значит дело в скине?

alatar 12.03.2012 19:33

О скинах для мобильников: раз, два, три.

Вы должны расширить spark.skins.mobile.SkinnableContainerSkin (в случае View) или spark.skins.mobile.ViewNavigatorApplicationSkin (в случае NavigatorApplication) и переписать защищенный метод drawBackground в котором и отрисовывать вашу картинку.

Light 12.03.2012 19:36

alatar О, спасибо огромное. Как раз та инфа, которую я искал!)) Надеюсь drawBackground вызывается при каждом изменении ориентации девайса.

И все же интересно, что за фигня с mxml-скинами, почему не работают как надо...

alatar 12.03.2012 19:36

В чем причина использования Loader вместо Embed'a? Вы планируете менять фон в рантайме?

P.S. Использование Image в скинах расточительно даже для десктопа, для этого есть более легкий класс BitmapImage.

Добавлено через 5 минут
Цитата:

И все же интересно, что за фигня с mxml-скинами, почему не работают...
Фигня не со скинами, а с тем что вы contentGroup не добавили. Куда ему, по-вашему, пихать дочерние компоненты?


Часовой пояс GMT +4, время: 21:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.