2011-02-28 9 views
2

mouseEnabledWhereTransparent가이 스킨에서 작동하지 않는 이유를 이해할 수 없습니다.mouseEnabledWhereTransparent가 예상대로 작동하지 않습니다.

이 피부는 기본적으로 투명한 배경과 왼쪽에 작은 삼각형이있는 버튼입니다. > ButtonText 그러나 삼각형 주변의 빈 공간에는 마우스 이벤트가 수신되지 않습니다.

나는 삼각형 경로 주위에 또 다른 그룹을 래핑 해 보았습니다. 그리고 그래픽 오브젝트로 포장하려고했지만 성공하지 못했습니다. 모든 밑에 0 알파가있는 Rect를 만들 수는 있지만 정확하게 mouseEnabledWhereTransparent가 수행해야하는 것은 아닙니다.

<?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:fb="http://ns.adobe.com/flashbuilder/2009" minWidth="21" minHeight="21" alpha.disabled="0.5" 
      mouseEnabledWhereTransparent="true"> 

    <!-- host component --> 
    <fx:Metadata> 
     <![CDATA[ 
     [HostComponent("spark.components.Button")] 
     ]]> 
    </fx:Metadata> 

    <!-- states --> 
    <s:states> 
     <s:State name="up" /> 
     <s:State name="over" /> 
     <s:State name="down" /> 
     <s:State name="disabled" /> 
    </s:states> 

    <!-- triangle tip --> 
    <s:Path data="M 0 0 L 0 14 L 10 7 L 0 0" bottom="5"> 
     <s:fill> 
      <s:SolidColor color="0xFFFFFF" /> 
     </s:fill> 
    </s:Path> 


    <!-- text --> 
    <s:Label id="labelDisplay" 
       textAlign="center" 
       verticalAlign="bottom" 
       maxDisplayedLines="1" 
       left="14" right="10" top="2" bottom="2" color="0x000000" fontSize="14"> 
    </s:Label> 
</s:SparkSkin> 
+0

아래 답변을 실행 했습니까? – Ryan

+0

ok, 그래서 완전히 비어있는 그룹은 mouseEnabledWhereTransparent = true 인 경우 보이지 않는 영역의 mouseEvents에 응답합니다. mouseEnabledWhereTransparent = true 일 때 SparkSkin은 보이지 않는 영역의 mouseEvents에 응답하지 않습니다. SparkSkin은 Group의 하위 클래스입니다. 나는 그것을 얻지 않는다. – iddqd

답변

1

요는, 당신이 필요하면 해당 경로가 히트 영역의 역할을하기 전에 사각형을 추가하는 것입니다,이 작품 :

<s:Rect left="0" right="0" top="0" bottom="0" > 
    <s:fill> 
     <s:SolidColor alpha="0" /> 
    </s:fill> 
</s:Rect> 

이 사람 here 사용자 정의 버튼을 만드는 좋은 예제가 (마이너스 레이블)

+0

Brian 당신의 솔루션은 작동하지만 여전히 궁금해합니다. 왜 히트 영역이 보이지 않는 사각형을 추가해야합니까? 그러나이 빈 그룹에 대해 보이지 않는 사각형을 추가 할 필요는 없습니다. . 그룹은 비어있는 경우에도 클릭에 응답합니다. 왜 피부가 아닐까요? 큰 문제는 아니지만 mouseEnabledWhereTransparent가 일관성이없는 것처럼 보입니다. – iddqd

+0

그룹/직사각형이없는 경로를 그릴 때 경로의 경계가 해당 구성 요소의 경계라고 생각하면됩니다. 그 삼각형 (>) 경로 주위의 영역이 투명하지, 그 무언가가 그 무대를 제외하고 아무 것도 클릭 theres하지! – Ryan

0

mouseEnabledWhereTransparent는 설정된 그룹에 마우스 이벤트 수신기가 없으면 아무 효과가 없습니다. 귀하의 예제에서 Button 객체에는 클릭 이벤트 리스너가 있지만 버튼의 스킨 객체 (SparkSkin)는 그렇지 않습니다.

".이 속성은 마우스, 터치, 또는 플래시 플레이어 제스처 이벤트가이 인스턴스에 추가하는 경우에 영향을 간다"GroupBase.mouseEnabledWhereTransparent에 대한 ASDoc에서

당신은 예를 들어, 아무것도하지 않습니다 피부에 마우스 이벤트 리스너를 추가하는 것에 대한 해결 방법 :

<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
      mouseEnabledWhereTransparent="true" click="doNothing()"> 
    <fx:Script> 
     <![CDATA[ 
      protected function doNothing():void { 
       trace('doNothing'); 
      } 
     ]]> 
    </fx:Script> 
    ... 
</s:SparkSkin> 

이 속성의 주요 사용 케이스에 직접 클릭 이벤트를 추가하고있다 그룹,하지만 당신이 제기하는 사건에 대해 생각하는 것은 흥미 롭습니다. hostComponent에 마우스 청취자가 첨부되어있는 경우, skin의 mouseEnabledWhereTransparent를 설정하면 (자), 「Enhancement Request」를 실시하는 것이 합리적입니다.

+0

음, 보통 버튼 스킨 내에 클릭 리스너를 추가하지 않을 것입니다. Spark 스킨의 핵심은 UI에서 로직을 분리하는 것이고, 실제 버튼에 클릭 리스너를 추가하는 것입니다. – iddqd

+0

그래, 그 리스너를 스킨에 추가하면 안된다. mouseEnabledWhereTransparent 속성이 실제로 작동하도록하려면 방금 해결 방법이라고 언급했습니다. 올바른 방법은 skin에서 mouseEnabledWhereTransparent를 사용하지 않고 투명한 Rect를 그립니다. –

+0

스킨 내에서 사용하는 경우 mouseEnabledWhereTransparent가 작동하지 않는다고 말할 수 있습니까? 그렇다면 왜? 예를 들면 다음과 같습니다. http://forums.adobe.com/thread/710351 mouseEnabledWhereTransparent를 사용할지 여부에 관계없이 CustomButtonSkin.mxml 코드는 똑같이 작동합니다. – iddqd

관련 문제