Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   SkinnableDataContainer + LayoutBase + useVirtualLayout - не создаются элементы (http://www.flasher.ru/forum/showthread.php?t=170617)

djyamato 28.10.2011 20:53

SkinnableDataContainer + LayoutBase + useVirtualLayout - не создаются элементы
 
Здравствуйте
Создал SkinnableDataContainer, назначил ему лэйаут (LayoutBase)
Если включить useVirtualLayout=true у лэйаута - НЕ создаются элементы в этом ДатаКонтейнере, если useVirtualLayout=false - создаются

Что дописать нужно в лэйауте ?

alatar 28.10.2011 21:14

LayoutBase не предназначен для непосредственного использования, только для создания собственных layout.
Цитата:

Что дописать нужно в лэйауте ?
Как минимум переписать метод updateDisplayList, в котором описать как будут расставляться элементы.

djyamato 28.10.2011 21:40

а если элементы сами знают о своих координатах ? в itemRenderer приходит data с координатами для элемента
Как тогда ?

alatar 28.10.2011 21:52

BasicLayout

djyamato 28.10.2011 22:06

Цитата:

Сообщение от alatar (Сообщение 1042417)
BasicLayout

ээх, не поддерживает он useVirtualLayout
Код:

Error: BasicLayout doesn't support virtualization.
Пошел немного по-бругому пути, но все равно рендереры сразу все создаются

Код AS3:

<s:BorderContainer>
  <s:DataGroup width="500" height="420"
    dataProvider="{_model.userProjects}"
      itemRenderer="itemRenderers.TheWallIR">
    <s:layout>
    <layouts:CustomBasicLayout useVirtualLayout="true"/>
    </s:layout>
  </s:DataGroup>
  </s:BorderContainer>

рендерер:
Код AS3:

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    autoDrawBackground="false"
    x="{_data.position.x}"
    y="{_data.position.y}"
    creationComplete="itemrenderer1_creationCompleteHandler(event)">
 <fx:Script>
  <![CDATA[
  import mx.events.FlexEvent;
 
  import Project.ProjectVO;
 
  [Bindable]
  protected var _data:Object;
 
  override public function set data(value:Object):void
  {
    _data=value;
    trace("IR data="+_data);
  }
 
  protected function itemrenderer1_creationCompleteHandler(event:FlexEvent):void
  {
    trace("ir creation complete "+_data.position.x+" "+_data.position.y);
  }
  ]]>
 </fx:Script>
 
 <s:Group width="100%" height="100%">
 
  <s:Group id="maskGroup" width="300" height="300">
  <s:Rect width="100%" height="100%" radiusX="6" radiusY="6">
    <s:fill>
    <s:SolidColor color="0xff0000"/>
    </s:fill>
  </s:Rect>
  </s:Group>
  <s:Image id="image" source="{_data.compill}"
    width="300"
    height="300"
    mask="{maskGroup}"/>
 </s:Group>
 
</s:ItemRenderer>

лэйаут:
Код AS3:

package layouts
{
 import mx.core.IVisualElement;
 
 import spark.layouts.BasicLayout;
 import spark.layouts.supportClasses.LayoutBase;
 
 public class CustomBasicLayout extends LayoutBase
 {
  protected var _index:uint;
 
  public function CustomBasicLayout()
  {
  useVirtualLayout=true;
  super();
  }
 
  override public function updateDisplayList(width:Number, height:Number):void
  {
  var count:int = target.numElements;
 
  for (var i:uint = 0; i < count; i++)
  {
    var element:IVisualElement = target.getVirtualElementAt(i);
    var elementPosBoundsX:Number=element.getLayoutBoundsX()+element.getLayoutBoundsWidth();
    var elementPosBoundsY:Number=element.getLayoutBoundsY()+element.getLayoutBoundsHeight();
 
    element.setLayoutBoundsSize(element.getPreferredBoundsWidth(), element.getPreferredBoundsHeight());
 
    if(element.getLayoutBoundsX()<target.getLayoutBoundsX() || element.getLayoutBoundsY()<target.getLayoutBoundsY() || elementPosBoundsX>target.getLayoutBoundsWidth() || elementPosBoundsY>target.getLayoutBoundsHeight())
    {
    trace("ELEMENT outside bounds !!!");
    element.includeInLayout = false;
    }
    else
    {
    trace("ELEMENT inside bounds !!!");
    element.includeInLayout = true;
    }
  }
  }
 }
}

9 элементов в базе и все 9 создаются все равно :(
трэйс:
Код:

ir creation complete 260 -120
ir creation complete 690 50
ir creation complete -15 -138
ir creation complete 206 -504
ir creation complete 203 -350
ir creation complete 721 705
ir creation complete 0 0
ir creation complete 145 17
ir creation complete 380 210

почемуууу ? Что я не так делаю ?

xsar 29.10.2011 23:07

попробуйте ItemRendererFunction (вроде так называется)


Часовой пояс GMT +4, время: 01:00.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.