Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   наследники ListBase и произвольная рамка для выделения элемента (http://www.flasher.ru/forum/showthread.php?t=98723)

__i 19.07.2007 15:52

наследники ListBase и произвольная рамка для выделения элемента
 
Болячка :
нужно сделать тоненькую рамку у айтем рендера у TileList, или сделать произвольную рамку, или вообще хоть что то сделать :D
по умолчанию рамка выглядит так
http://the33cows.com/flasher/tile1.jpg
нужно добиться такого
http://the33cows.com/flasher/tile2.jpg

Диагноз :
Вы неможете управлять размерами подсветки, вы можетие только менять ее цвет. Почему же так? В классе ListBase есть protected методы которые отвечают за прорисовку этой рамки в которых этот размер считается тупо размером самого itemRender'a, а так как itemRender"ы выстраиваються вплотную друг с другом, то расстояния вы фиг получите.

Рецепт :
Я не буду описывать свое решение, ибо оно кривое и не универсальное - небыло времени, но расскажу в каком направлении копать и буду ждать универсального решения :D.

Наследуем наш "листовый" класс от нужного нам класса (в примере TileList) и оверрайдим соответствующие методы
Код:

package
{
        import mx.controls.TileList;
        import mx.controls.listClasses.IListItemRenderer;
        import flash.display.Sprite;
        import flash.display.Graphics;

        public class TileListEX extends TileList
        {
                override protected function drawHighlightIndicator(        indicator:Sprite,
                                                                                        x:Number, y:Number,
                                                                                        width:Number, height:Number,
                                                                                        color:uint,
                                                                                        itemRenderer:IListItemRenderer) : void
                {
                          //тут реализуем нашу отрисовку
                }
               
                override protected function drawSelectionIndicator(
                                indicator:Sprite, x:Number, y:Number,
                                width:Number, height:Number, color:uint,
                                itemRenderer:IListItemRenderer):void
                    {
                                                      //тут реализуем нашу отрисовку
                }
           
                override protected function drawCaretIndicator(
                                indicator:Sprite, x:Number, y:Number,
                                width:Number, height:Number, color:uint,
                                itemRenderer:IListItemRenderer):void
            {
                                              //тут реализуем нашу отрисовку
            }
            override protected function drawItem(        item:IListItemRenderer,
                                                                                            selected:Boolean=false,
                                                                                            highlighted:Boolean=false,
                                                                                            caret:Boolean=false,
                                                                                            transition:Boolean=false):void
            {
                          //тут реализуем чего нам может не хватить в ходе отрисовки элемента
                    super.drawItem( item, selected, highlighted, caret, transition);
                                          //тут тоже что и 2 строчками выше но после отрисовки )
            }
        }
}

в своем случае я сделал отрисовку выделения в моем itemRender'e и дергал его методы, что есть не очень гуд, но позволяет рендеру рисовать все как ему удобно у себя внутри.

+
Маленькая Внутрижопная Витаминка, если вы хотите чтобы лист не тянул контент рендера , но элементы распологались равномерно на всю ширину/высоту, чтобы добиться этого вы должны нашаманить с количество строк/столбцов или их шириной, в своем листе и
запидалить рендер вроде этого
Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml"
                verticalAlign="middle"
                horizontalAlign="center"
                verticalScrollPolicy="off"
                horizontalScrollPolicy="off"
                >
               
        <mx:Canvas>
<!-- Тут уже делаем все что нужно -->
        </mx:Canvas>
       
</mx:Box>

Box заставит наш канвас "болтаться" по середине, а внутри канваса вы уже сможите наваять много всякого контента, который в случае потянет контент и бокс ).

Дохтор.


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

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