![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2009
Сообщений: 15
|
Столкнулся с такой проблемой. Создал список, у которого кастомный 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); } } } Я, конечно, могу навешать EnterFrame(сейчас закомментировал эту строчку) и все работает. Но вешать штук 30 ентерфреймов очень не хочется что-то. Может кто-нибудь сталкивался с такой проблемой, когда отдельные элементы не прорисовываются при скроллинге? Последний раз редактировалось sergeik81; 25.02.2010 в 18:46. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 15
|
В общем-то исправил я эту ошибку.
Дело оказалось в следующем. Мне пришлось изначально - спасибо дизайнеру, который все это рисовал(надеюсь, он сейчас икает) - сильно кастомизировать List и переписать кое-какие protected методы. И в одном из них мне пришлось повозиться с listContent, который и содержит все элементы списка.Нужно было сделать так, чтобы он был со скругленными уголками и еще с тенью(люблю я дизайнеров, которые по движению своей руки создают геморрой на несколько дней всем остальным). Ну, понятно, что тень я делал через фильтр. И в итоге получилось, что когда накладывалась тень, то при перерисовки избирательно очищались некоторые прорисованные элементы, даже просто бэкграунды. Я, конечно, переделал сейчас, добавив в listContent еще один элемент в качестве скина и уже к нему применял фильтр. В итоге все заработало, но осадок остался. Может, кто сталкивался с тем, что если накладывать на элемент фильтр при updateDisplayList, то автоматически очищаются все графические элементы внутри этого контейнера? |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|