Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 04.06.2011, 22:04
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 1  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
По умолчанию CustomList + Tween на 4 айтема с переиспользованием айтемов

Здравствуйте
Не могу подступиться правильно к решению следующей проблемы
Делаю кастомный лист (без использольания компонентов), в нем 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


Последний раз редактировалось djyamato; 04.06.2011 в 22:29.
Создать новую тему   Часовой пояс GMT +4, время: 15:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:42.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.