J'ai une grille comme celle-ci dans mon application Flex 4. Lorsque la vue qui contient cette grille est visible et que la vue est modifiée pour une autre vue, mon application essaie de jouer l'effet Fondu en tant que transition vers l'autre vue. Ma transition est définie comme suit:Erreur BitmapData non valide lorsque Flex tente de jouer une transition Crossfade, et que j'ai un mx: Grille avec deux éléments Label ou plus
<s:transitions>
<s:Transition fromState="*" toState="*">
<s:Parallel>
<s:CrossFade duration="150" target="{this}" />
</s:Parallel>
</s:Transition>
</s:transitions>
Ceci applique la transition à n'importe quelle vue. Il n'y a qu'un seul effet pour le moment mais c'est dans un bloc Parallèle depuis que j'ai expérimenté plusieurs transitions. Maintenant, quand je suis sur une vue où cette grille est visible, et j'essaie de passer à une autre vue, j'obtiens une erreur "Invalid BitmapData". VOICI la trace complète de la pile:
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]
J'ai expérimenté avec l'ajout et la suppression des contrôles de la grille, et finalement réduit à un un VGroup j'ai dans la grille. Si je supprime ce VGroup (et tous ses enfants), la transition joue bien. Ajoutez-le à nouveau, et tout éclate à nouveau. J'ai essayé d'utiliser une VBox au lieu d'un VGroup, mais il n'y avait pas de changement - même erreur. J'ai également essayé de se débarrasser de horizontalAlign = "center", et encore, pas de changement. Quelques expériences supplémentaires révèlent que si j'ai seulement un enfant dans le VGroup, alors la transition fonctionne. Dès que je reçois deux enfants dans le VGroup, cependant, il jette l'erreur.
En outre, si je supprime complètement le VGroup et que je rends simplement les enfants directs Labels du GridItem, il échoue (même erreur BitmapData non valide). Il semble donc que le vrai coupable est d'avoir plusieurs contrôles au même niveau dans l'arbre de contrôle? Par exemple, deux contrôles fonctionnent s'ils sont dans une relation parent-enfant linéaire à l'intérieur du GridItem (GridItem-> VGroup-> Label), mais deux labels au même niveau (que leur parent immédiat soit le VGroup ou le GridItem) provoque le Invalid Erreur BitmapData. Je ne connais aucun autre contrôle que j'utiliserais pour accomplir ce que j'essaie de faire avec le contrôle Grid, qui consiste à mettre en page des choses dans un tableau, avec des cellules qui s'étendent sur d'autres lignes ou colonnes. TileLayout fonctionnerait si je n'avais pas besoin de passer dans d'autres lignes et colonnes dans quelques cas. J'ai pensé à utiliser le positionnement absolu, mais cela rendra difficile (impossible?) D'ajouter/supprimer facilement d'autres contrôles dans la "grille", ce que je veux faire. Lorsque nous diffusons des offres promotionnelles sur les abonnements, nous ajoutons du texte dans certaines cellules en notant l'impact de la promotion (ou n'affecte pas) cette option de tarification particulière.
Suggestions?
Voici à quoi ressemble la grille.
<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>