在spark tile列表中是否有内置方法来获取给定点的项目?
由于
答案 0 :(得分:1)
正如@ www.Flextras.com建议的那样,查看源代码会很有用。 TileLayout
有一个名为getElementNearestScrollPosition()
的方法,它会为您提供最接近您指定的Point
的元素的索引。但是,此方法隐藏在Flex的mx_internal
命名空间中,因此它会从ASDoc中排除。
这是一个似乎有效的简单示例。我没有展示itemRenderer。
Main.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),则不需要在坐标空间之间进行转换......但这在现实世界的应用程序中很少发生。