2013-01-01 26 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