![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Ув. сообщество, веду поиск компонента для скролинга километровых портянок однотипных итемов. Требования следующие:
Обязательно: 1) Компонент не должен разом пихать все итемы в себя, т.к. их дофигиша. Т.е. Должен работать аля андройдовский/айосевский, добавляя итемы, по мере их появления на экране. Желательно: 2)Легковесный 3)Легко Скинируемый 4) Итемы должны представлять полноценные DysplayObject'ы внутри компонента.Т.е. если я в качестве итема предоставляю MovieClip,то и внутри компонента он должен остаться MovieClip'ом. Поделитесь ,плз, чем вы пользуетесь. Оч. не хочется изобретать очередной велосипед. Заранее спасибо. |
|
|||||
|
.
|
У меня корпоративный велосипед. В своих проектах мы используем написанные мною т.н. ItemRenderer компоненты вкупе с т.н. техникой virtual layout. Идеи (вдохновление) от Flex, реализация моя. Портянки можно располагать Linear Layout (vertical или horizontal) или Tile Layout. Длина портянок ограничена доступной памятью на количество моделек для рендеринга. Тормозит на сложных ItemRenderer, в том числе на тех, в которых есть вложенные списки с virtual layout. Но похожее, с честным созданием всех рендереров превышает квоты по памяти и по тормозам скролла в O(n^2).
Могу выделить пару-тройку критериев, по которым я немного походил и понял, что они ключевые. Исходный код не дам и не просите =) Добавлено через 15 минут И тут я вспомнил, что скроллер — это отдельный компонент. Он скроллит не только списки, но и любые DisplayObject, имплементирующие определенный интерфейс, некий IViewPort. Причем, сам скроллер может быть не только попиксельным, но, и, например, постраничным. |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Dimarik -не мог-бы ты в общих словах,конспективно описать структуру классов своего велосипеда? Ну и вообще внутреннюю кухню. Если уж писать свой костыль хотелось-бы какой-то универсальности. Например интересует как определять список видимых итемов, если заранее неизвестны их(итемов) гарариты?
|
|
|||||
|
undefined - тебе кроме формулы знать ничего не надо, все остальное это чисто твоя кастомизация.
ВОт тебе формула на DO любой высоты и ширины, и соответсвенно можно добавлять НОВЫЕ списки в любой момент апдейт будет нормальным. И формула на чисто текстовое поле. _content.y = _startYContent - ( (_content.height - _mask.height) / _wayOfScroll ) * ( _scroll.y - _startYScroll );
__________________
Марк Tween |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
in4core -
Цитата:
так-то формулу я и сам могу спокойно вывести |
|
|||||
|
Цитата:
Я знаю о чем говорю, я пользуюсь списками и элементами на прокрутку всю свою деятельность. И эта формула покрывает ВСЕ варианты
__________________
Марк Tween |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
еще раз, требование что я написал обязательное,т.к. добавляя 1000 итемов по 50 пикс. в высоту получаем портянку на 50 тыс., от чего у флэша инфаркт случается, так что не все.
upd: проблема не в том,что я не могу вывести формулу перемещения контейнера, проблема в том, как вообще избавиться от глобального контейнера. Вот Dimarik правильно понял. Хотелось-бы нечто подобное его велику. Последний раз редактировалось undefined; 31.12.2014 в 18:12. |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
мы ходим по кругу
Цитата:
|
|
|||||
|
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
боже использовать маску для скролла это издевательство над своим собственным мозгом.
Не знаю как там в андроне или яблоке, но раз уж такая кухня пошла, то вот: var MySprite: Sprite = new Sprite(); // создаем обычный спрайт он же и будет нашим скролбоксом MySprite.scrollRect = new Rectangle(0, 0, 100, 100); // здесь мы обрезаем содержимое, т.е получается эффект наложения маски самим флешем addChild(MySprite);// таким же макаром можно адачить все его содержимое // проблем с динамикой вообще нет если содержимое скролла не имеет нулевую точку вращения в центре, в последнем случае придется немного с координатами шаманить Для самого скролинга используем конструкцию типа: var Scroll: Rectangle = MySprite.scrollRect; Scroll.y = Scroll.y + someDeltaNumVar;// someDeltaNumVar - переменная или константа на которую будет смешаться скролл при Scroll.y - по вертикале, при Scroll.x по горизонтали. MySprite.scrollRect = Scroll;// все применяем новую "маску" уже смещенную, т.е. после этого произойдет смещение содержимого на someDeltaNumVar |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Да я тоже сначала на масках делал. Потом посмотрел производительность на мобилках и опечалился. Пришлось экстренно переделывать на scrollRect. Со скролл-барами проблем не возникало. Могу подкинуть готовый компонент со скролл-барами и преферансом.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|