2009-11-16 1 views
0

저는 Rect, Label 및 Group이있는 ButtonSkin (Flex 4 Skin)을 가지고 있습니다.이 그룹은 Rect를 마스킹합니다. rollOver에서 Label의 x를 this.width으로 움직이고 rollOut에서 다시 원래 위치로 되돌립니다. 문제는, 내가 rollOut 할 때, 내가 레이블 (this.width * 2)을 지나갈 때까지 오른쪽으로 굴러 가면 (레이블이 마스크 뒤에 숨어 있음), rollOut을 등록하지 않는다는 것입니다. 어떻게 방지 할 수 있을까요? 롤백 할 때 보이는 영역을 벗어나서 마스크 뒤에있는 라벨 위에 있어도 "롤아웃"이벤트가 발생합니까?FlexEvent에서 마우스 이벤트를 마스크하도록 제한 하시겠습니까?


<?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"> 
 <!-- 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> 
 <!-- transitions --> <s:transitions> <mx:Transition fromState="*" toState="*"> <s:Animate target="{labelDisplay}" duration="300"> <s:SimpleMotionPath property="x"/> </s:Animate> </mx:Transition> </s:transitions> 
 <!-- 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> 
 <!-- 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> 
 <!-- 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> 
 </s:SparkSkin> 

답변

1

이 작업을 수행하는 가장 쉬운 방법은 당신의 버튼 피부 디스플레이 상단에 앉아 "히트"개체를 만드는 것입니다 :

여기에 스킨입니다. "히트"개체를 정확한 크기로 만들면 마우스를 대화 형으로 사용하고 "히트"개체에 이벤트 수신기를 연결할 수 있습니다.

플렉스 플렉스 4에서는 <s:Group>을 사용할 수 있으며 투명성이나 가시성에 대해 걱정할 필요가 없습니다.

관련 문제