Эффект затухания, применяемый к смежному ItemRenderer - PullRequest
0 голосов
/ 30 ноября 2011

Я применяю 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.

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

спасибо

Ответы [ 2 ]

0 голосов
/ 01 декабря 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>
0 голосов
/ 30 ноября 2011

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

...