2010-05-12 47 views
2

我有一个使用皮肤文件来呈现显示的各种状态(上/下/下等)的按钮。我想在各州之间实现动画。例如,在从'up'到'over'之间的变化之间,我想淡入颜色和边框。如何在程序化皮肤中的状态之间动画? [FLEX]

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

有谁知道我可以如何实现编程式按钮皮肤的多个属性的多个动画?提前致谢!

注:我已经调查使用中间人,但不能看到它是如何帮助我的情况

回答

0

由于您使用的皮肤文件,我想你使用FLEX4。

在Flex4中,可以使用包含在s: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> 
+0

感谢您的答复了。我使用的是Flex 3,我用来实现动画的解决方案是使用Tweener类为按钮 – Lewis 2010-06-01 09:22:54

+1

设置各种图形的Alpha值,“因为您使用皮肤文件,所以我使用Flex4”,这是一个莽撞的假设。 Flex 3中的每个内置Halo控件都使用ProgrammaticSkins自行绘制。因此,如果有人使用皮肤文件,他可以使用Flex 3或Flex 4. – 2010-06-30 18:16:14

+0

我的印象是,Flex 4中新的Spark组件体系结构也引入了整个皮肤概念。 – Treur 2010-07-01 07:17:40

0

刘易斯,

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

现在因为这个,你不能轻松地制作任何皮肤本身的图画,但是,有一个解决方案,虽然它并不完全优雅。

ProgammaticSkin扩展FlexShape,所以你不能添加任何孩子到你的皮肤,但UIComponent寻找实现IProgrammaticSkin的东西,所以你可以使你自己的ProgrammaticSkin扩展FlexSprite而不是FlexShape。这可以让你addChild到你的皮肤。如果你足够聪明,你可以同步各种缓存皮肤之间的转换,使它们具有动画效果。

希望帮助,

乔纳森