我是Flex新手,正在将纯Flash / AS3应用程序移植到Flex 4.5
我已根据BorderContainer
创建了自定义MXML组件<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="160" height="140" >
<s:Image id="_avatar" enableLoadingState="true"
x="0" y="0" width="160" height="120" />
<s:Label id="_username" x="0" y="125"
fontSize="12" fontWeight="bold" />
</s:BorderContainer>
我正在尝试在mouseOver上添加突出显示/增长效果
和“压下”对mouseDown的影响到该组件:
<fx:Script>
<![CDATA[
import flash.filters.*;
public static const SHADOW:Array = [ new DropShadowFilter(8,
80, 0x000000, 0.2, 32, 32, 1, 1, false, false, false) ];
public static const GLOW:Array = [ new GlowFilter(0xFFFF00,
0.5, 36, 36, 1, 1, false, false) ];
private var _oldScale:Number;
private function mouseOver(event:MouseEvent):void {
_oldScale = scaleX;
filters = GLOW;
}
private function mouseDown(event:MouseEvent):void {
_oldScale = scaleX;
scaleX *= 0.95;
scaleY *= 0.95;
filters = null;
}
private function mouseUp(event:MouseEvent):void {
scaleX = scaleY = _oldScale;
filters = GLOW;
}
private function mouseOut(event:MouseEvent):void {
scaleX = scaleY = _oldScale;
filters = SHADOW;
}
不幸的是,根本没有调用这些方法。
在纯Flash / AS3应用程序中,我打电话
addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver);
addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
addEventListener(MouseEvent.MOUSE_OUT, handleMouseOut);
addEventListener(MouseEvent.CLICK, handleMouseClick);
它会运行良好,但在Flex 4.5中我不知道如何做到这一点。
另外我注意到有一个 dropShadowVisible =“true”属性,但不确定它是否/如何用于我的目的。
我不确定是否允许在flex中扩展/缩小自定义组件,或者我可能应该使用“Flex Effects”(但如何?)并设置 disableLayout =“true” ?
答案 0 :(得分:4)
以下两种方法中的任何一种都适用于Flex 4.5:
<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="160" height="140"
mouseOut="handleMouseOut(event)"
mouseDown="handleMouseDown(event)"
mouseUp="handleMouseUp(event)"
mouseOver="handleMouseOver(event)"
creationComplete="init(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
public function init(event:FlexEvent):void {
/*
addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver);
addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
addEventListener(MouseEvent.MOUSE_OUT, handleMouseOut);
addEventListener(MouseEvent.CLICK, handleMouseClick);
*/
}
谢谢你,Mansuro,我无法给你答案,但我赞成了yoyur评论。