2012-04-17 1 views
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, когда я не мог поймать события мыши, пока не заполнят холст с прозрачным фоном. Но теперь у меня противоположная проблема. Спасибо за помощь.

+0

Попробуйте mouseChildren = ложь; –

ответ

0

Вы на правильном пути.

Как вы уже сделали, вам нужно обернуть Line объект в Group, или какой-либо другой класс контейнера, так как искровые графические примитивы (как Line) не отправлять события мыши.

Я предполагаю, что ваша проблема в том, что, поскольку ваша линия диагональна, ограничивающая рамка для Group представляет собой прямоугольник, который намного больше, чем линия.

Если вы рисуете горизонтальную или вертикальную линию, ограничительная рамка Group должна быть просто размером Line. Затем поверните Group, чтобы получить диагональную линию:

Примечание. Я только что выбрал случайное значение X и вращение ... Вращение влияет на перемещение координат объекта X/Y ... если только вы не используете что-то иное, чем BasicLayout. Таким образом, вам нужно будет настроить x/y/rotation (и/или макет), чтобы расположить вашу линию в нужном месте.

<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> 
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>