PDA

Просмотр полной версии : Перерисовка list при скроллинге


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


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, то автоматически очищаются все графические элементы внутри этого контейнера?