В моем приложении 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>