2013-01-01 1 views
0

Y a-t-il une méthode intégrée dans la liste des tuiles spark pour obtenir un objet à partir d'un point donné?Mise en page Spark Tile - Récupérer le rendu à partir du point

Merci

+0

Qu'entendez-vous par "Point"? Faites-vous référence aux coordonnées x, y? Ou autre chose? Pour autant que je sache, il n'y a pas de méthode pour obtenir un objet basé sur les coordonnées x, y. Vous pouvez cependant consulter les ASDocs et le code source. – JeffryHouser

Répondre

1

Comme @ www.Flextras.com suggéré, en regardant le code source peut être utile. TileLayout a une méthode nommée getElementNearestScrollPosition() qui vous donnera l'indice de l'élément le plus proche d'un Point que vous spécifiez. Toutefois, cette méthode est masquée dans l'espace de noms mx_internal de Flex, de sorte qu'elle est exclue des ASDocs.

Voici un exemple simple qui semble fonctionner. Je ne montre pas l'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> 

Notez que je fais une conversion entre les coordonnées locales et mondiales. Vous devez faire cela convertir les coordonnées globales dans le MouseEvent à l'espace de coordonnées du List. J'ai également ajouté un Button à l'application principale, uniquement pour tester cette conversion ... la présence du bouton fait en sorte que les coordonnées locales de la liste ne correspondent pas les coordonnées globales. Si la liste était placée à l'origine (0,0), cette conversion entre espaces de coordonnées ne serait pas nécessaire ... mais cela arrive rarement dans les applications du monde réel.

+1

Je ne pense pas que vous ayez besoin d'étendre la classe pour accéder à une méthode namespaced. Juste importer l'espace de noms 'mx_internal' fera l'affaire. – RIAstar

+0

Vous avez tellement raison monsieur, comme d'habitude! Modification de ma réponse pour supprimer la classe inutile :) –

+0

Merci Sunil, fonctionne bien, je me demande pourquoi ils l'ont appelé getElementNearestScrollPosition, son plus comme getElementUnderPoint (p: Point). – Eran

Questions connexes