我有一个带有各种状态(上/下/下等)的按钮,它使用皮肤文件来呈现显示。我想实现状态之间的动画。例如,在从“向上”到“过度”的变化之间,我想淡入颜色和边框。
我目前这样做的方式是使用视图状态并使用转换和 mx:AnimateProperty 在它们之间设置动画。但是,使用这种方法我只能为每个视图状态设置一个属性。所以只有边框,或者颜色可以动画。
有谁知道我如何在程序化按钮皮肤的多个属性上实现多个动画?提前致谢!
注意:我已经研究过使用 tweener,但看不到它对我的情况有何帮助
我有一个带有各种状态(上/下/下等)的按钮,它使用皮肤文件来呈现显示。我想实现状态之间的动画。例如,在从“向上”到“过度”的变化之间,我想淡入颜色和边框。
我目前这样做的方式是使用视图状态并使用转换和 mx:AnimateProperty 在它们之间设置动画。但是,使用这种方法我只能为每个视图状态设置一个属性。所以只有边框,或者颜色可以动画。
有谁知道我如何在程序化按钮皮肤的多个属性上实现多个动画?提前致谢!
注意:我已经研究过使用 tweener,但看不到它对我的情况有何帮助
刘易斯,
您将无法在 Flex 3 中为 ProgammaticSkin 的任何属性设置动画,因为 UIComponent 执行皮肤的方式是通过实例化您的皮肤的全新实例,然后设置其名称属性。然后,当组件需要显示新状态时,它会创建另一个新实例,将其 name 属性设置为不同的值,使旧皮肤不可见,并使新皮肤可见。通过这种方式,它“缓存”了皮肤,而不是在 UpdateDisplayList 中切换状态和重绘。
现在正因为如此,您无法轻松地为皮肤本身的任何绘图设置动画,但是,有一个解决方案,尽管它并不完全优雅。
ProgammaticSkin 扩展了 FlexShape,因此您不能将任何子级添加到您的皮肤中,但 UIComponent 会寻找实现 IProgrammaticSkin 的东西,因此您可以制作自己的 ProgrammaticSkin 来扩展 FlexSprite 而不是 FlexShape。这允许您将Child 添加到您的皮肤中。如果您足够聪明,您可以在各种缓存的皮肤之间同步过渡以使它们具有动画效果。
希望有帮助,
乔纳森
由于您使用皮肤文件,我想您使用 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>