Недопустимая ошибка BitmapData, когда Flex пытается воспроизвести переход Crossfade, и у меня есть mx: Grid с двумя или более элементами Label - PullRequest
0 голосов
/ 03 декабря 2010

В моем приложении Flex 4 такая сетка есть.Когда вид, содержащий эту сетку, является видимым, и вид меняется на другой вид, мое приложение пытается воспроизвести эффект Crossfade как переход к другому виду.Мой переход определен так:

 <s:transitions>
      <s:Transition fromState="*" toState="*">
           <s:Parallel>
                <s:CrossFade duration="150" target="{this}" />
           </s:Parallel>
      </s:Transition>
 </s:transitions>

Это применяет переход к любому представлению.Сейчас там только один эффект, но он находится в параллельном блоке, так как я экспериментировал с несколькими переходами.

Теперь, когда я нахожусь в представлении, где эта Сетка видна, и я пытаюсь перейтив другом представлении я получаю ошибку «Invalid BitmapData».Вот полная трассировка стека:

ArgumentError: Error #2015: Invalid BitmapData.
 at flash.display::BitmapData/ctor()
 at flash.display::BitmapData()
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:99]
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:135]
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:135]
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:135]
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:135]
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:135]
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:135]
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:135]
 at spark.utils::BitmapUtil$/getRealBounds()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:135]
 at spark.utils::BitmapUtil$/getSnapshot()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\utils\BitmapUtil.as:63]
 at spark.effects::AnimateTransitionShader/getValueFromTarget()[E:\dev\4.0.0\frameworks\projects\spark\src\spark\effects\AnimateTransitionShader.as:283]
 at mx.effects::Effect/http://www.adobe.com/2006/flex/mx/internal::captureValues()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\effects\Effect.as:1462]
 at mx.effects::CompositeEffect/http://www.adobe.com/2006/flex/mx/internal::captureValues()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\effects\CompositeEffect.as:377]
 at mx.effects::CompositeEffect/captureStartValues()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\effects\CompositeEffect.as:358]
 at mx.core::UIComponent/commitCurrentState()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:9778]
 at mx.core::UIComponent/setCurrentState()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:9701]
 at mx.core::UIComponent/set currentState()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:6087]
 at main/previousButton_clickHandler()[C:\Data\dev\Flex\main\src\main.mxml:48]
 at main/__previousButton_click()[C:\Data\dev\Flex\main\src\main.mxml:241]

Я экспериментировал с добавлением и удалением элементов управления из сетки, и в конечном итоге сузил его до VGroup, которую я получил в сетке.Если я удаляю эту VGroup (и все это дети), переход играет нормально.Добавьте его обратно, и все снова взорвется.Я попытался использовать VBox вместо VGroup, но изменений не было - та же ошибка.Я также попытался избавиться от HorizontalAlign = "center", и снова без изменений.

Некоторые дальнейшие эксперименты показывают, что если у меня только один ребенок в VGroup, то переход работает.Однако, как только я получаю двух дочерних элементов в VGroup, выдается ошибка.

Кроме того, если я полностью удаляю VGroup и просто делаю Labels прямыми дочерними элементами GridItem, происходит сбой (та же ошибка Invalid BitmapData).Таким образом, кажется, что настоящий виновник - иметь несколько элементов управления на одном уровне в дереве элементов управления?Например, два элемента управления работают, если они находятся в линейном родительско-дочернем отношении внутри GridItem (GridItem-> VGroup-> Label), но две метки на одном уровне (независимо от того, является ли их непосредственным родителем VGroup или GridItem) вызывают InvalidОшибка BitmapData.

Мне неизвестно о каком-либо другом элементе управления, который я мог бы использовать для выполнения того, что я пытаюсь сделать, с помощью элемента управления Grid, который представляет собой элементы макета в таблице, когда некоторые ячейки располагаются в других строках.или столбцы.TileLayout сработал бы, если бы в некоторых случаях мне не нужно было разбиваться на другие строки и столбцы.

Я думал об использовании абсолютного позиционирования, но это затруднит (невозможно?) Простое добавление /удалите другие элементы управления в «сетку», что я и хочу сделать.Когда мы проводим рекламные акции по подписке, мы добавляем текст в определенные ячейки, отмечая, как рекламная кампания влияет (или не влияет) на этот конкретный вариант ценообразования.

Предложения?

Вот что такое сеткавыглядит так.

<mx:Grid id='membershipGrid' >
 <mx:GridRow>
      <mx:GridItem>

      </mx:GridItem>
      <mx:GridItem>
           <s:Label text="One Year" fontWeight="bold"/>
      </mx:GridItem>
      <mx:GridItem>
           <s:Label text="Two Year" fontWeight="bold"/>
      </mx:GridItem>
      <mx:GridItem>
           <s:Label text="5 Year" fontWeight="bold"/>
      </mx:GridItem>
      <mx:GridItem>
           <!-- Comment out this VGroup, and everything works fine -->
           <s:VGroup horizontalAlign="center">
                <s:Label text="Monthly Autorenew"  fontWeight="bold"/>
                <s:Label text="Payment plan option is not available" fontStyle="italic" />
                <s:Label text="for multiple year memberhips." fontStyle="italic" />
           </s:VGroup>
      </mx:GridItem>
 </mx:GridRow>
 <mx:GridRow>
      <mx:GridItem>
           <s:Label text="Standard Membership" />
      </mx:GridItem>
      <mx:GridItem>
           <s:RadioButton id="standardOneYear" group="{membershipTypeSelection}"
                             label="{pricing.getMembership(MembershipName.STANDARD_ONE_YEAR).currencyPrice}" />

      </mx:GridItem>
      <mx:GridItem>
           <s:RadioButton id="standardTwoYear" group="{membershipTypeSelection}"
                             label="{pricing.getMembership(MembershipName.STANDARD_TWO_YEAR).currencyPrice}" />

      </mx:GridItem>
      <mx:GridItem>
           <s:RadioButton id="standardFiveYear" group="{membershipTypeSelection}"
                             label="{pricing.getMembership(MembershipName.STANDARD_FIVE_YEAR).currencyPrice}" />

      </mx:GridItem>
      <mx:GridItem horizontalAlign="center">
           <s:RadioButton id="monthlyAutorenew" group="{membershipTypeSelection}"
                             label="{pricing.getMembership(MembershipName.MONTHLY_AUTORENEW).currencyPrice}" />

      </mx:GridItem>
 </mx:GridRow>

Ответы [ 2 ]

0 голосов
/ 24 октября 2012

Ответ: не используйте переход Spark. Я должен был сдаться. Облом, да?

0 голосов
/ 02 декабря 2011

Не уверен, поможет ли это, но когда я сталкивался с подобными проблемами, пытаясь заставить эффект Spark Wipe работать как переход, мне пришлось использовать компонент MX: Box в качестве контейнера для контейнеров Spark Group, чтобы он работал. Эти искровые переходы кажутся очень темпераментными.

...