Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Перерисовка list при скроллинге (http://www.flasher.ru/forum/showthread.php?t=136793)

sergeik81 25.02.2010 18:43

Перерисовка list при скроллинге
 
Столкнулся с такой проблемой. Создал список, у которого кастомный itemRenderer.
Все бы ничего, но в этом itemRenderer рисуется определенным цветом квадратик, обозначающий статус продукта. Так вот, при скроллинге почему-то далеко не все эти квадратики перерисовываются. То есть когда элемент списка становится видимым, то у некоторых этот квадратик рисуется, у других же нет, только если кликнешь по этому элементу. Все уже излазил, какие только валидейты не пробовал, на какие только события не навешивался - все без толку.
Код этого квадратика предельно простой, сам itemRenderer(код не привожу) - просто набор текстовых полей и этого квадратика

Код AS3:

package com.cc.components
{
        import flash.events.Event;
 
        import mx.core.UIComponent;
 
        public class LightboxStatusItem extends UIComponent
        {
                private var _color:uint=0xFF0000;
                private var _itemAlpha:Number=1;
 
                public function LightboxStatusItem()
                {
                        super();
                        width=18;
                        height=18;
                        //addEventListener(Event.ENTER_FRAME, validate);
 
                }
 
                private function validate(event:Event):void{
                                invalidateDisplayList();
 
                        }
 
                public function set color(value:uint):void{
 
                            if(value !=_color){
                                    _color=value;
                                    invalidateDisplayList();
                            }
 
                    }
 
                    public function get color():uint{
 
                                    return _color;
                    }
 
                  public function set itemAlpha(value:Number):void{
 
                            if(value !=_itemAlpha){
                                    _itemAlpha=value;
                                    invalidateDisplayList();
                            }
 
                    }
 
                    public function get itemAlpha():Number{
 
                                    return _itemAlpha;
                    }
 
                override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
                        super.updateDisplayList(unscaledWidth, unscaledHeight);
                        drawRoundRect(0, 0, unscaledWidth, unscaledHeight, 2, color, itemAlpha);
                }
 
        }
}

Не хочет перерисовывать и все. При том, что явно вызывается updateDisplayList при скроллинге.
Я, конечно, могу навешать EnterFrame(сейчас закомментировал эту строчку) и все работает. Но вешать штук 30 ентерфреймов очень не хочется что-то.

Может кто-нибудь сталкивался с такой проблемой, когда отдельные элементы не прорисовываются при скроллинге?

sergeik81 04.03.2010 06:06

В общем-то исправил я эту ошибку.
Дело оказалось в следующем. Мне пришлось изначально - спасибо дизайнеру, который все это рисовал(надеюсь, он сейчас икает) - сильно кастомизировать List и переписать кое-какие protected методы. И в одном из них мне пришлось повозиться с listContent, который и содержит все элементы списка.Нужно было сделать так, чтобы он был со скругленными уголками и еще с тенью(люблю я дизайнеров, которые по движению своей руки создают геморрой на несколько дней всем остальным). Ну, понятно, что тень я делал через фильтр. И в итоге получилось, что когда накладывалась тень, то при перерисовки избирательно очищались некоторые прорисованные элементы, даже просто бэкграунды. Я, конечно, переделал сейчас, добавив в listContent еще один элемент в качестве скина и уже к нему применял фильтр. В итоге все заработало, но осадок остался. Может, кто сталкивался с тем, что если накладывать на элемент фильтр при updateDisplayList, то автоматически очищаются все графические элементы внутри этого контейнера?


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

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