Как создать пользовательский рендерер ячеек для списка плитки во Flash - PullRequest
0 голосов
/ 27 июня 2010

Мне нужно внедрить пользовательский cell renderer в моем проекте, я сделал поиск в Google, но не смог найти то, что мне нужно.

Мне нужно каждый cell в tile list для отображения 2 значков с парой labels. Мне нужен хороший пример, чтобы начать это.

Если возможно, мне нужен способ создать шаблон как MovieClip и передать его в список плиток для рендеринга ячеек.

Ответы [ 2 ]

0 голосов
/ 12 июля 2010

Для создания пользовательского средства визуализации ячеек вам необходимо расширить класс выбора из доступных listClasses . ImageCell выглядит как хорошее начало для вашего проекта.

Вы хотели бы:

  1. Расширить класс списка
  2. добавить свои собственные биты в (label / TextField и т. д.)
  3. переопределяет защищенные функции, чтобы настроить новую ячейку в соответствии с вашими потребностями (например, метод drawLayout, в котором вам нужно аккуратно расположить элементы).* Вот очень простой пример:
    package
    {
        import fl.controls.listClasses.ICellRenderer;
        import fl.controls.listClasses.ImageCell;
        import fl.controls.TileList;
        import fl.data.DataProvider;
        import fl.managers.StyleManager;
        import flash.events.EventDispatcher;
        import flash.events.*;
        import fl.containers.UILoader;
    
        public class CustomImageCell extends ImageCell implements ICellRenderer
        {  
    
            public function CustomImageCell() 
            {
                super();
    
                //do other stuff here
    
                loader.scaleContent = false;
                loader.addEventListener(IOErrorEvent.IO_ERROR, handleErrorEvent, false, 0, true);
    
                useHandCursor = true;
            }
    
            override protected function drawLayout():void
            {
                var imagePadding:Number = getStyleValue("imagePadding") as Number;
                loader.move(11, 5);
    
                var w:Number = width-(imagePadding*2);
                var h:Number = height-imagePadding*2;
                if (loader.width != w && loader.height != h)
                {
                    loader.setSize(w,h);
                }
                loader.drawNow(); // Force validation!
    
            }
            override protected function handleErrorEvent(event:IOErrorEvent):void {
                trace('ioError: ' + event);
                //dispatchEvent(event);
            }
        }
    }
    

    Очень хороший пример того, что вам нужно, в этом сообщении .Пользовательская ячейка, представленная там:

    1. Поддерживает пользовательский фон (путем установки обложки ячейки)
    2. Использует метку TextField.

    HTH

0 голосов
/ 12 июля 2010

создайте файл с именем MyRenderer.mxml, вставьте это:

<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Image id="img" width="123" height="123" />
<mx:Script><![CDATA[
override public function set data (value:Object):void {
    super.data = value;
    // mess with img here
}
]]></mx:Script>
</mx:Box>

в списке плиток, напишите это:

<mx:TileList itemRenderer="MyRenderer" ... />
...