2
我是新来的Flex和我移植一个纯粹的Flash/AS3应用的Flex 4.5添加mouseOver/mouseDown/mouseUp /等。自定义MXML组件
我已经创建了一个基于BorderContainer
<?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>
我想自定义MXML组件添加高亮/长功效鼠标悬停
和鼠标按下“按下”效应,该组件:
<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;
}
不幸的是,这些方法根本没有被调用。
在纯闪存/ 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效果”(但是该怎么做?)并设置为disableLayout =“true”?
我很确定容器不派遣鼠标事件。你需要一个真正的UI控件。但是,如果UI控件冒泡事件,你应该能够在容器上为它们添加监听器。 – JeffryHouser
你在这种情况下添加了事件监听器吗?因为你也可以在flex中做到这一点,因为无论如何你都在使用actionscript – Mansuro