2013-01-01 27 views
0
獲取渲染

火花拼貼列表中是否有內置的方法來獲取某個特定點的項目?火花拼貼布局 - 從點

由於

+0

「點」是什麼意思?你指的是x,y座標嗎?或者是其他東西?據我所知,沒有辦法根據x,y座標獲取項目。不過,您可以查看ASDoc和源代碼。 – JeffryHouser

回答

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),座標空間之間的這種轉換不是必要的......但在實際應用中很少發生這種情況。

+1

我不認爲你有擴展類來訪問命名空間的方法。只需導入'mx_internal'命名空間即可。 – RIAstar

+0

與往常一樣,你是如此正確的先生!編輯我的答案,以刪除不必要的類:) –

+0

感謝Sunil,偉大的工程,想知道他們爲什麼將它命名爲getElementNearestScrollPosition,它更像getElementUnderPoint(p:Point)。 – Eran