![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2009
Сообщений: 77
|
Добрый день, столкнулся с таким неприятным багом в flex spark компаненте List: реализовал постраничное листание элементов с помощью этого контрола, и когда свойству dataProvider присваиваешь новую коллекцию элементов в нем все элементы инвертируются, но дополнительного события dataChange в каждом ItemRenderer не происходит. Это заметно, т.к. нужно было реализовать анимацию переворачивания карты когда в ItemReтвукук происходит dataChange. Кто-нибудь сталкивался? Или может посоверуете другой контрол для постраничного вывода? Как быть?
В приложении флешка с примером бага постраничного листания, если непонятно написал. |
|
|||||
|
"Я тут что-то сделал и оно как-то не так работает".
Ну почему все надо клещами вытаскивать? Вам помощь нужна или сочувствие? Добавлено через 5 минут P.S. Для этого не обязательно менять dataProvider.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 77
|
Цитата:
Цитата:
1. Есть List 2. для него есть ItemRenderer, в нем на событии dataChange стартует ScaleEffect от 0 до 1, потом обновляются иконки и тексты для новых данных, и запускается ScaleEffect от 0 до 1, получается эффект переворачивания карты 3. в контроллере при нажатии на кнопки влево/вправо в свойство dataProvider кладу новый ArrayList. вот вроде бы все, все стандартно этот баг особенно хорошо заметен при перелистывании первой страницы на вторую, там есть элемент с синей лентой, он стоит на 4 месте в первом ряду, а после нажатия на кнопку ">" он становится вторым во втором ряду, а если поменять у List layout c TileLayout на HorisontalLayout, то элементы будут выстраиваться в ряд, и этот синий элемент будет стоять так же на 4 месте, а при нажатии на кнопку ">" на 7, т.е. на 4 ом месте с конца, и если приглядеться то можно заметить что остальные элементы так же, инвертируются относительно центра. Хочу еще раз отметить что никакого дополнитильного события dataChange в ItemRenderer не происходит, т.е. это мой код который только и должен менять внешний вид у ItemRenderer отрабатывает только один раз, тогда когда надо, в момент когда ScaleEffect который сворачивает карту выполнен, и ScaleEffect который разворачивает карту еще не начался, т.е. когда scale у элемента = 0 вот выложу исходники на всякий случай ItemRenderer: <?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
dataChange="onDataChange(event)">
<fx:Script>
<![CDATA[
import flash.events.Event;
import flash.utils.setTimeout;
private function onDataChange(e:Event):void
{
setTimeout(hideEffect.play, 50 * itemIndex);
}
private function onHideEnd(e:Event):void
{
bindData();
showEffect.play();
}
private function bindData():void
{
var ach:Achievement = Achievement(data);
icon.source = AchievementIcons.defineByType(ach.type);
achievementName.text = AchievementsNameLocale.defineByType(ach.type);
if (achievementName.text.length > 12)
achievementName.text = achievementName.text.substr(0, 12);
if(ach.isAchieved)
{
isAchieved.source = CommonIcons.complete;
isAchieved.visible = true;
}
else
{
isAchieved.visible = false;
}
}
]]>
</fx:Script>
<fx:Declarations>
<s:Scale id="showEffect" target="{effectTarget}" scaleXFrom="0" scaleXTo="1" duration="200" />
<s:Scale id="hideEffect" scaleXFrom="1" target="{effectTarget}" scaleXTo="0" duration="200" effectEnd="onHideEnd(event)" />
</fx:Declarations>
<s:Group id="effectTarget" x="50">
<s:Group id="container" x="-50">
<s:Rect width="100" height="110" radiusX="10" radiusY="10">
<s:fill>
<s:SolidColor color="0xffffff" />
</s:fill>
<s:stroke>
<s:SolidColorStroke color="0x000000" weight="1" />
</s:stroke>
</s:Rect>
<s:VGroup horizontalAlign="center" width="100%" top="5">
<s:BitmapImage id="icon" />
<s:RichText id="achievementName" />
</s:VGroup>
<s:BitmapImage id="isAchieved" right="5" bottom="5" />
</s:Group>
</s:Group>
</s:ItemRenderer>
achievementsPaginator.current() возвращает Array private function onAchievementsPrevClick(e:Event):void { achievementsPaginator.prev(); } private function onAchievementsNextClick(e:Event):void { achievementsPaginator.next(); } private function onAchievementsPageChange(e:Event):void { window.ahievements.dataProvider = new ArrayList(achievementsPaginator.current()); } Последний раз редактировалось il phoenix; 22.07.2013 в 09:48. |
|
|||||
|
Цитата:
Вот то, что EffectManager не поддерживает DataGroup для addedEffect и removedEffect эффектов это баг, хоть Adobe и пытаются отмазываться. Добавлено через 8 минут Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 77
|
Цитата:
Цитата:
спасибо за объяснение, а можете посоветовать другой контрол на флексе на котором пейджинг с анимацией можно сделать? |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:41. |
|
|
« Предыдущая тема | Следующая тема » |
|
|