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

あなたは正しい軌道に乗っています。

既に行ったように、Spark グラフィックス プリミティブ ( など) はマウス イベントを送出しないため、LineオブジェクトをGroup、またはその他のコンテナー クラスでラップする必要があります。Line

あなたの問題は、あなたの線が対角線であるため、の境界ボックスがGroup線よりもはるかに大きい長方形であることだと思います。

水平線または垂直線を引く場合、 のバウンディング ボックスはGroupの寸法になりLineます。次に、 を回転させGroupて対角線を取得します。

BasicLayoutランダムな X 値と回転を選択したことに注意してください...回転には、オブジェクトの X/Y 座標を置き換える効果があります.... したがって、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 に答える