Эффект Fade применяется к соседнему ItemRenderer

Я применяю эффект s:Fade к событию s:ItemRenderer к событию mouseOver. Эффект затухания заканчивается нормально, но во время его выполнения он применяется только к половине объекта ItemRenderer плюс половина рядом (справа) ItemRenderer.

ItemRenderer объекты находятся внутри s:List, который использует HorizontalLayout.

Вот код для ItemRenderer под названием FilterTagRenderer:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                autoDrawBackground="false"
                mouseOver="{fadeIn.play()}"
                mouseOut="{alpha = 0.6}"
                alpha="0.6">

    <fx:Declarations>
        <s:Fade id="fadeIn" alphaTo="1" duration="500" target="{this}"/>
    </fx:Declarations>

    <s:Label id="lblFilterName" text="{data}" paddingBottom="5" fontWeight="bold" fontSize="14"/>

</s:ItemRenderer>

Вот код для List:

    <s:List id="filterValuesList" width="{this.width}" borderVisible="false"
    itemRenderer="view.FilterTagRenderer">
        <s:layout>
            <s:HorizontalLayout id="flowLayout" gap="6"/>
        </s:layout>
    </s:List>

Я использую Flex SDK 4.0.

Кто-нибудь знает, это ошибка во флексе или я что-то не так делаю?

Спасибо


person turing_machine    schedule 30.11.2011    source источник
comment
Какую версию Flex SDK вы используете? И некоторый реальный код тоже будет полезен.   -  person Georgi Hristozov    schedule 30.11.2011
comment
@GeorgiHristozov: я обновил пост.   -  person turing_machine    schedule 30.11.2011


Ответы (2)


Вы делаете что-то немного неправильно, поскольку с компонентами Spark вы должны позволить изменению состояния запускать эффект, а не пытаться запустить его самостоятельно. Однако эффекты под капотом — это просто фильтр для одного объекта DisplayObject, поэтому я не уверен, как можно получить эффект, частично воздействующий на два разных объекта. Ваши рендереры, вероятно, просто не там, где вы думаете. Что произойдет, если вы используете один из макетов, поставляемых с Flex, например TileLayout?

person Amy Blankenship    schedule 30.11.2011
comment
Я использую HorizontalLayout, который поставляется с Flex, не так ли? - person turing_machine; 30.11.2011
comment
Кстати, я также пытался использовать эффекты, синхронизированные с переходами состояний, та же ошибка! И что касается вашего комментария о том, что, вероятно, рендереры не знают, где они находятся: эффект заканчивается нормально, что означает, что альфа увеличивается только на желаемом рендерере элементов. - person turing_machine; 30.11.2011
comment
Извините, я увидел идентификатор flowLayout и подумал, что вы используете сторонний макет потока. (saturnboy.com/2009/10/flow-layout) - person Amy Blankenship; 30.11.2011

Похоже на ошибку.

Шаги для воспроизведения: просто скомпилируйте и запустите следующие два файла, а затем наведите указатель мыши на любое слово.

Файл приложения (FadeBug.mxml):

<?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:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
        ]]>
    </fx:Script>

    <s:List dataProvider="{new ArrayCollection('The quick brown fox jumped over the lazy dog'.split(' '))}"
            itemRenderer="BuggyItemRenderer" >
        <s:layout>
            <s:HorizontalLayout gap="6"/>
        </s:layout>
    </s:List>

</s:Application>

BuggyItemRenderer.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                autoDrawBackground="false"
                alpha="0.4"
                mouseOver="{fadeEffect.play()}"
                mouseOut="itemrenderer1_mouseOutHandler(event)">

    <fx:Script>
        <![CDATA[
            protected function itemrenderer1_mouseOutHandler(event:MouseEvent):void
            {
                if (fadeEffect.isPlaying) {
                    fadeEffect.stop();
                }
                this.alpha = 0.4;
            }
        ]]>
    </fx:Script>


    <fx:Declarations>
        <s:Fade id="fadeEffect" target="{this}" alphaFrom="0.4" alphaTo="1"/>
    </fx:Declarations>

    <s:Label text="{data}" fontSize="25" fontWeight="bold"/>

</s:ItemRenderer>
person turing_machine    schedule 01.12.2011