Ограничить MouseEvents для маскировки в Flex Skin? - PullRequest
0 голосов
/ 16 ноября 2009

У меня есть ButtonSkin (Flex 4 Skin) с Rect, Label и группой, группа маскирует Rect. При rollOver я анимирую метку x на this.width, а при rollOut обратно в исходное положение. Проблема в том, что когда я сворачиваюсь, если я переворачиваю вправо (где метка скрывается за маской), он не регистрирует rollOut, пока я не пройду мимо метки (this.width * 2). Как это предотвратить, поэтому, когда я выкатываюсь из видимой области, хотя я все еще над меткой за маской, я получаю событие "rollOut"?

Вот кожа:


<code><?xml version="1.0" encoding="utf-8"?>
<s:SparkSkin
 xmlns:fx="http://ns.adobe.com/mxml/2009"
 xmlns:s="library://ns.adobe.com/flex/spark"
 xmlns:mx="library://ns.adobe.com/flex/halo"
 xmlns:style="http://www.flexinstyle.org/2009"
 minWidth="21" minHeight="21"
 alpha.disabledStates="0.5"></code>
<code>
 <!-- states -->
 <s:states>
  <mx:State name="up" />
  <mx:State name="over" stateGroups="overStates" />
  <mx:State name="down" stateGroups="downStates" />
  <mx:State name="disabled" stateGroups="disabledStates" />
  <mx:State name="upAndSelected" stateGroups="selectedStates, selectedUpStates" />
  <mx:State name="overAndSelected" stateGroups="overStates, selectedStates" />
  <mx:State name="downAndSelected" stateGroups="downStates, selectedStates" />
  <mx:State name="disabledAndSelected" stateGroups="selectedUpStates, disabledStates, selectedStates" />
 </s:states></code>
<code>
 <!-- transitions -->
 <s:transitions>
  <mx:Transition fromState="*" toState="*">
   <s:Animate
    target="{labelDisplay}"
    duration="300">
    <s:SimpleMotionPath property="x"/>
   </s:Animate>
  </mx:Transition>
 </s:transitions></code>
<code>
 <!-- fill -->
 <s:Rect left="1" right="1" top="1" bottom="1" mask="{masker}" maskType="clip">
  <s:fill>
   <mx:LinearGradient rotation="90">
    <mx:GradientEntry id="backgroundTopGradient"
     color="0xff0000"/>
    <mx:GradientEntry id="backgroundBottomGradient" color="0xf00000"/>
   </mx:LinearGradient>
  </s:fill>
 </s:Rect></code>
<code>
 <!-- label -->
 <s:Label id="labelDisplay"
   textAlign="center"
   verticalAlign="middle"
   maxDisplayedLines="1" x.up="10" x.over="100"
   horizontalCenter="0" verticalCenter="1"
   left="10" right="10" top="2" bottom="2" mouseChildren="false"
   color="0xffffff" mouseEnabled="false">
 </s:Label></code>
<code>
 <!-- mask -->
 <s:Group id="masker" width="100%" height="100%" mouseEnabled="false">
  <s:Rect width="100%" height="100%">
   <s:fill>
    <s:SolidColor alpha="0.1"/>
   </s:fill>
  </s:Rect>
 </s:Group></code>
<code>
</s:SparkSkin></code>

1 Ответ

1 голос
/ 16 ноября 2009

Самый простой способ сделать это - создать «ударил» объект, который находится в верхней части экрана в вашей оболочке кнопки. Вы создаете объект «попадания» в точных измерениях, с которыми вы хотите, чтобы мышь была интерактивной, и присоединяете слушателей событий к объекту «попадания».

В flex flex 4 вы можете использовать <s:Group> и вам не нужно беспокоиться о прозрачности или видимости.

...