![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Здравствуйте
Не могу подступиться правильно к решению следующей проблемы Делаю кастомный лист (без использольания компонентов), в нем 4 видимых айтема У него вместо сроллера 2 стрелочки, вниз-вверх перемещения списка. Перемещение айтемов происходить должно по 4 штуки сразу, причем, твином ! Когда пользователь доскроллировал список до конца, его нижний айтем должен упираться в низ маски даже если нечетное количество айтемов, или же оно не делится на 4 нацело. Надо бы это сделать с переиспользованием созданных айтемов, вместо того чтобы создавать множество айтомов в списке. Как я сделал: Создал 8 айтемов - 4 видимых и 4 за границей нижней списка При скроле списка вверх, те 4 айтема которые ушли вверх по окончании твина перемещаются под предидущие 4. Для них высчитываются ID-шки и обновляются данные, соответствующие их обновленным ID-шкам. Все бы ничего, НО количество айтемов может быть и нечетным !!! Как бы мне подсчитать все это ? Возможно, кто-то уже делал подобное, натолкните на мысль пожалуйста Вот часть кода private var totalVisible:int=4; public function set bounds(rect:Rectangle):void { _bounds=rect; maskSprite.graphics.beginFill(0xFF0000,0.4); maskSprite.graphics.drawRect(_bounds.x,_bounds.y,_bounds.width,_bounds.height); maskSprite.graphics.endFill(); //itemsSprite.mask=maskSprite; } public function set dataProvider(collection:ArrayCollection):void { data=collection; for(i=0;i<totalVisible*2;i++) { listItem=new CustomListItem(i,"hotel",data.getItemAt(i)); // i = ID айтема itemsSprite.addChild(listItem); listItem.y=i*(listItem.height); totalVisibleItems.push(listItem); } } public function itemsUp():void { for(i=0;i<totalVisibleItems.length;i++) { if(totalVisibleItems[i].y>_bounds.height) { totalVisibleItems[i].y-=totalVisible*(listItem.height)*2; totalVisibleItems[i].ID=totalVisibleItems[i].ID-totalVisible*2; totalVisibleItems[i].data=data.getItemAt(totalVisibleItems[i].ID); } itemNextY=totalVisibleItems[i].y+(listItem.height)*totalVisible; itemTween=new Tween(totalVisibleItems[i],"y",Strong.easeInOut,totalVisibleItems[i].y,itemNextY,tweenTime,true); itemTween.addEventListener(TweenEvent.MOTION_FINISH,itemTweenFinishHandler); } } public function itemsDown():void { for(i=0;i<totalVisibleItems.length;i++) { itemNextY=totalVisibleItems[i].y-(listItem.height)*totalVisible; itemTween=new Tween(totalVisibleItems[i],"y",Strong.easeInOut,totalVisibleItems[i].y,itemNextY,tweenTime,true); itemTween.addEventListener(TweenEvent.MOTION_FINISH,itemTweenFinishHandler); } } ///////////// handlers /////// private function itemTweenFinishHandler(event:TweenEvent):void { if(event.target.obj.y<0) { event.target.obj.y+=(event.target.obj.height)*totalVisible*2; event.target.obj.ID=event.target.obj.ID+totalVisible*2; event.target.obj.data=data.getItemAt(event.target.obj.ID); } } Последний раз редактировалось djyamato; 04.06.2011 в 22:29. |
|
|||||
|
Нет, к сожалению, неподходит
|
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
|
|
|||||
|
айтемов может быть и 500 и 1000, думаю, даже если, visible=false это будет неэкономично для ресурсов, или я ошибаюсь?
Ну, как бы, все верно, вы хорошую мысль предлагаете, спасибо, разовью ее: Есть у меня 9 айтемов, человек их скроллирует стрелками, дошел до 9й, если добавленные пустые айтемы увидит он это будет плохо. 9 айтемов, 3 раза нажатие вверх = 10,11,12 индексы (id-шки) у несуществующих но видимых айтемов, получается, что нужно расчитать величину смещения этих 4х айтемов чтобы не видно было 3х несуществующих ? Последний раз редактировалось djyamato; 05.06.2011 в 01:10. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Смотря что за айтемы. Проверте сами, добавьте 1000 и посомтрите. Зачем придумывать сложную систему "экономии" ресурсов не зная нужна ли она?
|
|
|||||
|
скролл возможен до последнего актуального айтема а не только по 4 штуки
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|