0

火花瓷砖列表中是否有内置方法可以从给定点获取项目?

谢谢

4

1 回答 1

1

正如@www.Flextras.com 建议的那样,查看源代码可能很有用。TileLayout有一个名为的方法getElementNearestScrollPosition(),它将为您提供最接近Point您指定的 a 的元素的索引。但是,此方法隐藏在 Flex 的mx_internal命名空间中,因此它被排除在 ASDocs 之外。

这是一个似乎有效的简单示例。我没有显示 itemRenderer。

主要.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" xmlns:local="*">

    <fx:Script>
        <![CDATA[
            import mx.core.mx_internal;

            use namespace mx_internal;

            protected function list1_clickHandler(event:MouseEvent):void
            {
                var localPointInList:Point = list.globalToLocal(new Point(event.stageX, event.stageY));
                trace(tileLayout.getElementNearestScrollPosition(localPointInList));
            }
        ]]>
    </fx:Script>

    <fx:Declarations>
        <s:ArrayCollection id="foo">
            <fx:Object date="Jan 1, 2012"/>
            <fx:Object date="Jan 1, 2013"/>
            <fx:Object date="Jan 1, 2014"/>
        </s:ArrayCollection>
    </fx:Declarations>

    <s:layout>
        <s:HorizontalLayout />
    </s:layout>

    <s:Button label="I'm a button"/>

    <s:List id="list" dataProvider="{foo}" itemRenderer="TestRenderer" click="list1_clickHandler(event)">
        <s:layout>
            <s:TileLayout id="tileLayout" requestedColumnCount="2" />
        </s:layout>
    </s:List>   

</s:Application>

请注意,我正在本地坐标和全局坐标之间进行一些转换。您需要这样做将 中的全局坐标转换MouseEvent为 的坐标空间List。我还在Button主应用程序中添加了一个,只是为了测试这种转换......按钮的存在使得列表的局部坐标与全局坐标不匹配。如果列表位于原点 (0,0),则无需在坐标空间之间进行这种转换……但这在现实世界的应用程序中很少发生。

于 2013-01-01T18:47:43.627 回答