![]() |
как сделать список плиткой?
Подскажите пожалуйста, профессионалы, как сделать список изображений плиткой, но не по ровной сетке как в таблице? Как сделать расположение объектов в зависимости от ширины каждого изображения (высоту можно выставить одинаковую)? Нужно получить что то типа фотоальбома... Заранее спасибо.
|
Код AS3:
|
Не совсем то. Нужен динамический список, содержимое которого перестраивается при масштабировании списка. Нужно что то наподобие, как если бы использовать mx:Box для размещения там изображений. Проблема в том, что в mx:Box элементы распределяются по горизонтали/вертикали без перераспределения на следующую строку/столбец.
|
ну так и обновляй координаты при изменении размеров контейнера.
|
так если довести до абсурда количество элементов в контейнере, то насколько все это оптимально в плане быстродействия?
|
обновлять надо только те,что видны в данный момент.В первом приближении можно считать что все итемы расположены строго плиткой и дальше прикинуть сколько их влезит во вьюпорт контейнера
Добавлено через 3 минуты либо лучше так: начинаешь обновлять координаты и проверяешь не вылез ли текущий итем за пределы вьюпорта, как вылез - останавливаемся. Добавлено через 11 минут как-то так: Код AS3:
|
Цитата:
|
да не, мой велосипед вполне справится с абсурдно большим списком ибо не зависит от его размера.Только если размер контейнера до абсурда доводить никто не будет.
|
Твой велосипед то справится, а вот флеш плеер нет)
|
С чем конкретно не справится? С отрисовкой небольшого кол-ва видимых итемов?
|
Кто-то на форуме тут ваял создание такой плитки.
Поищите по ключеому слову "метро-стайл" Вроде так это называется. Не помню только - по английски это было или как. |
Цитата:
|
b000ris, чем не устраивает мое решение?
|
При достаточно большом количестве элементов слишком сильно грузит флеш. Это неприемлемо.
|
Цитата:
Добавлено через 2 минуты Если ты хоть одним глазом посмотришь на код, то увидишь что в цикле только ифы и сложения.Скорее флэш ляжет на отрисовке такого числа элементов, чем на рассчете их координат. |
Вот то что сделал (оно реально работает):
Надо использовать в качестве layout для контейнера класс следующего кода: package { import mx.core.ILayoutElement; import spark.components.supportClasses.GroupBase; import spark.layouts.supportClasses.LayoutBase; public class FlowLayout extends LayoutBase { override public function updateDisplayList(containerWidth:Number, containerHeight:Number):void { var x:Number = 0; var y:Number = 0; var layoutTarget:GroupBase = target; var count:int = layoutTarget.numElements; for (var i:int = 0; i < count; i++) { var element:ILayoutElement = layoutTarget.getElementAt(i); element.setLayoutBoundsSize(NaN, NaN); var elementWidth:Number = element.getLayoutBoundsWidth(); var elementHeight:Number = element.getLayoutBoundsHeight(); if (x + elementWidth > containerWidth) { x = 0; y += elementHeight; } element.setLayoutBoundsPosition(x, y); x += elementWidth + 10; } } } } |
| Часовой пояс GMT +4, время: 13:34. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.