2

我有一个带有各种状态(上/下/下等)的按钮,它使用皮肤文件来呈现显示。我想实现状态之间的动画。例如,在从“向上”到“过度”的变化之间,我想淡入颜色和边框。

我目前这样做的方式是使用视图状态并使用转换和 mx:AnimateProperty 在它们之间设置动画。但是,使用这种方法我只能为每个视图状态设置一个属性。所以只有边框,或者颜色可以动画。

有谁知道我如何在程序化按钮皮肤的多个属性上实现多个动画?提前致谢!

注意:我已经研究过使用 tweener,但看不到它对我的情况有何帮助

4

3 回答 3

0

刘易斯,

您将无法在 Flex 3 中为 ProgammaticSkin 的任何属性设置动画,因为 UIComponent 执行皮肤的方式是通过实例化您的皮肤的全新实例,然后设置其名称属性。然后,当组件需要显示新状态时,它会创建另一个新实例,将其 name 属性设置为不同的值,使旧皮肤不可见,并使新皮肤可见。通过这种方式,它“缓存”了皮肤,而不是在 UpdateDisplayList 中切换状态和重绘。

现在正因为如此,您无法轻松地为皮肤本身的任何绘图设置动画,但是,有一个解决方案,尽管它并不完全优雅。

ProgammaticSkin 扩展了 FlexShape,因此您不能将任何子级添加到您的皮肤中,但 UIComponent 会寻找实现 IProgrammaticSkin 的东西,因此您可以制作自己的 ProgrammaticSkin 来扩展 FlexSprite 而不是 FlexShape。这允许您将Child 添加到您的皮肤中。如果您足够聪明,您可以在各种缓存的皮肤之间同步过渡以使它们具有动画效果。

希望有帮助,

乔纳森

于 2010-06-30T18:13:53.630 回答
0

http://www.degrafa.org/

http://www.degrafa.org/source/AdvancedSkins/Skins.html

于 2010-05-13T10:24:11.750 回答
0

由于您使用皮肤文件,我想您使用 Flex4。

在 Flex4 中,您可以使用包装在 as:Sequence 或 s:Parallel 节点中的多个 mx:AnimatePropery 声明。

<s:transitions>
  <s:Transition>
    <s:Parallel>
      <mx:AnimateProperty
        target="{button}"
        property="property1"
        fromValue="property1StartValue"
        toValue="property1EndValue" />
      <mx:AnimateProperty
        target="{button}"
        property="property2"
        fromValue="property2StartValue"
        toValue="property2EndValue" />
    </s:Parallel>
  </s:Transition>
</s:transitions>
于 2010-05-31T08:36:42.880 回答