火花瓷砖列表中是否有内置方法可以从给定点获取项目?
谢谢
正如@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),则无需在坐标空间之间进行这种转换……但这在现实世界的应用程序中很少发生。