Spark Tile布局 - 从点开始渲染渲染器

时间:2013-01-01 14:36:12

标签: flex layout tile flex-spark

在spark tile列表中是否有内置方法来获取给定点的项目?

由于

1 个答案:

答案 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),则不需要在坐标空间之间进行转换......但这在现实世界的应用程序中很少发生。