интервал прокрутки в Spark List с превышением Tilelayout при использовании колеса мыши после прокрутки с помощью щелчка - PullRequest
0 голосов
/ 27 августа 2010

У меня есть список искр с рендером элементов и макетом плитки.
Если я прокручиваюсь, щелкая мышью по полосе прокрутки и пытаясь прокрутить колесом мыши после этого, возникает проблема:

Интервал прокрутки увеличен, вместо прокрутки на один элемент вниз (или вверх), Список прокручивает на 4 пункта вниз (или вверх).

<s:List
    dataProvider="{myDataProvider}"
    itemRenderer="MyRenderer"
    left="11" right="11"
    bottom="3" top="10"
    useVirtualLayout="false"
    >
        <s:layout>
            <s:TileLayout
                columnAlign="justifyUsingWidth"
                rowAlign="justifyUsingGap"
                orientation="rows"
                rowHeight="180"
                columnWidth="220"
                clipAndEnableScrolling="true"
                />
        </s:layout>
    </s:List>

rowHeight = 180 и columnWidth = 220 - это размеры моего рендерера.

Любые намеки, что не так или как я мог решить эту проблему?

Обновление: Это небольшой пример:

Основное применение:

<?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"
               creationComplete="init(event)">
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            [Bindable] public var items:ArrayCollection;

            protected function init(event:FlexEvent):void{
                items = new ArrayCollection();
                for(var i:int = 0; i<200; i++){
                    var obj:Object = new Object();
                    obj.name = "Item "+i;
                    items.addItem(obj);
                }
            }

                    protected function list1_mouseWheelHandler(event:MouseEvent):void{
                trace("delta ="+event.delta);
            }
        ]]>
    </fx:Script>
    <s:Group width="50%"
             height="50%">
        <s:List
            dataProvider="{items}"
            left="5" right="5"
            top="5" bottom="5"
            itemRenderer="MyRenderer"
            allowMultipleSelection="false"
            useVirtualLayout="false"
            mouseWheel="list1_mouseWheelHandler(event)"
            >
            <s:layout>
                <s:TileLayout
                    columnAlign="justifyUsingWidth"
                    rowAlign="justifyUsingGap"
                    orientation="rows"
                    rowHeight="180"
                    columnWidth="220"
                    clipAndEnableScrolling="true"
                    />
            </s:layout>
        </s:List>
    </s:Group>

И рендер:

<?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" 
                xmlns:spareparts="de.rotex.spareparts.*"
                width="220" height="180">

    <s:BorderContainer borderColor="#FFF9DE" >      
        <s:Label horizontalCenter="0" verticalCenter="0"
                 text="{data.name}" />
    </s:BorderContainer>
</s:ItemRenderer>

Если вы сейчас попытаетесь прокрутить, вы заметите, что (с одной прокруткой) вы увидите элементы 6 и 7 вверху (для свойства line-scroll в windows установлено значение 3, что в порядке тогда). Но если вы теперь нажмете на полосу прокрутки и снова прокрутите (сверху), вы увидите, что пункты 12 и 13 находятся вверху. Не пункт 6 и 7, как раньше ...

1 Ответ

1 голос
/ 19 апреля 2011

Вы можете контролировать количество, прокручиваемое колесом мыши, создав подкласс VScrollBar и переопределив метод mouseWheelHandler.К сообщению в этой ветке форума прикреплен пример кода: http://forums.adobe.com/message/2783736

...