0

仅当我与组件的可见部分交互时,如何使 Flex 调度鼠标事件?在这种情况下,我希望仅在悬停该行时才调度事件。

<s:Group mouseOver="trace('over')">
    <s:Line xFrom="0" yFrom="0" xTo="100" yTo="100">
         <s:stroke>
             <s:SolidColorStroke color="0" weight="3"/>
         </s:stroke>
    </s:Line>
</s:Group>

我记得前段时间在 Flex 3 中遇到了一个问题,当时我无法捕捉鼠标事件,直到我用透明背景填充画布。但现在我遇到了相反的问题。感谢帮助。

4

2 回答 2

0

您可以尝试以下代码:-

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;

            private function rollOver(event:MouseEvent):void
            {
                Alert.show('over');
            }

            private function drawLine():void
            {
                var g:Graphics = graphics;

                graphComp.graphics.clear();
                var strokeColor:Number = getStyle("strokeColor");
                var shadowColor:Number = getStyle("shadowColor");

                graphComp.graphics.beginFill(strokeColor);
                graphComp.graphics.drawRect(0, 0, 100, 1);
                graphComp.graphics.endFill();

                graphComp.graphics.beginFill(shadowColor);
                graphComp.graphics.drawRect(0, 1, 100, 1);
                graphComp.graphics.endFill();
                graphComp.rotation = 45;

            }
        ]]>
    </fx:Script>
    <s:Group id="graphComp" x="100" y="100" creationComplete="drawLine()" rollOver="rollOver(event)"/>

</s:Application>
于 2012-04-18T06:20:13.023 回答
0

你在正确的轨道上。

正如您已经完成的那样,您需要将Line对象包装在Group或其他容器类中,因为 Spark 图形基元(如Line)不分派鼠标事件。

我假设您的问题是,由于您的线是对角线,因此边界框Group是一个比线大得多的矩形。

如果你画一条水平线或垂直线,那么 的边界框Group应该就是 的尺寸Line。然后旋转Group得到你的对角线:

请注意,我刚刚选择了一个随机 X 值和旋转...旋转具有置换对象 X/Y 坐标的效果...除非您使用BasicLayout. 因此,您必须调整 x/y/旋转(和/或布局)以将您的线定位在正确的位置。

<s:Group mouseOver="trace('over')" rotation="45">
    <s:Line x="100" yFrom="0" yTo="100">
        <s:stroke>
            <s:SolidColorStroke color="0" weight="3"/>
        </s:stroke>
    </s:Line>
</s:Group>
于 2012-04-17T18:36:35.923 回答