特定のポイントからアイテムを取得するための組み込みメソッドがスパーク タイル リストにありますか?
ありがとう
@www.Flextras.com が提案したように、ソース コードを見ると役立つ場合があります。には、指定した a に最も近い位置にある要素のインデックスを提供するTileLayout
という名前のメソッドがあります。ただし、このメソッドは Flex の名前空間に隠されているため、ASDocs から除外されます。getElementNearestScrollPosition()
Point
mx_internal
これは、機能しているように見える簡単な例です。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) に配置されている場合、この座標空間間の変換は必要ありませんが、実際のアプリではめったに起こりません。