Здравствуйте
Не могу подступиться правильно к решению следующей проблемы
Делаю кастомный лист (без использольания компонентов), в нем 4 видимых айтема
У него вместо сроллера 2 стрелочки, вниз-вверх перемещения списка. Перемещение айтемов происходить должно по 4 штуки сразу, причем, твином ! Когда пользователь доскроллировал список до конца, его нижний айтем должен упираться в низ маски даже если нечетное количество айтемов, или же оно не делится на 4 нацело.
Надо бы это сделать с переиспользованием созданных айтемов, вместо того чтобы создавать множество айтомов в списке.
Как я сделал:
Создал 8 айтемов - 4 видимых и 4 за границей нижней списка
При скроле списка вверх, те 4 айтема которые ушли вверх по окончании твина перемещаются под предидущие 4. Для них высчитываются ID-шки и обновляются данные, соответствующие их обновленным ID-шкам.
Все бы ничего, НО количество айтемов может быть и нечетным !!!
Как бы мне подсчитать все это ?
Возможно, кто-то уже делал подобное, натолкните на мысль пожалуйста
Вот часть кода

Код AS3:
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);
}
}
Я вот думаю, а не ошибся ли я, создавая 4 дополнительных невидимых айтема, а не 1