Я провел где-то вчера борется с макетами Android (... или лучше настраиваемых макетов). Для общих целей формы из макетов коробки, которые предлагают андроиды, более чем достаточно. Но когда дело доходит до более сложных вариантов использования (давайте рассмотрим пример карусели с перекрытием изображений, которые лежат на эллиптическом пути), я быстро понял ограничение и сложность API-интерфейсов Android. Это был мой подход:
-
Использование компоновки ящиков не является вариантом (для многих неуправляемых проблем для обработки), однако потребность в графических объектах, которые могут быть добавлены в контейнер (например, например, ImageView), необходима для того, чтобы легко выполнять перевод, вращение и т.д. через встроенную анимацию.
-
AbsoluteLayout представляется наиболее подходящим для этой цели. Он позволяет добавлять производные объекты просмотра и писать собственный алгоритм для их размещения. Но... это устарело. Это позор! Кто хочет использовать устаревшую apis?
-
Следующее наиболее разумное дело - написать свой собственный макет, подклассифицирующий мистическую ViewGroup.. и вот здесь все разваливается (по крайней мере, для меня). Это сложный, вводящий в заблуждение и сложный способ сделать это так же, как писать собственный собственный макет для качания (я действительно делал это много лет назад, и я помню, чтобы быть проще).
-
Затем (управляемый отчаянием) подкласс класса View, переопределяя метод onDraw и рисование непосредственно на Canvas, кажется единственным прямым решением (хотя это напоминает мне дни java2D... долгие часы, потраченные на достижение высокий 1% вашего проекта), но затем вы отказываетесь от удобных встроенных API-интерфейсов анимации, которые вы хотите применить к графике, нарисованной на холсте.
Вывод состоит в том, что, если я не пропустил что-то, существующая архитектура Android немного далека от парадигмы программирования, предлагаемой некоторыми другими технологиями UI, такими как flash или javafx (я могу легко реализовать описанную выше карусель в javafx и flash). Причина в том, что, например, в javafx объект Scene (сопоставимый с концепцией View and android) предлагает по умолчанию абсолютный макет. Затем вы можете применить другие из макетов коробки, если хотите. Но для сценариев, где требуется настраиваемый макет, вам ничего не нужно делать.
Я немного удивлен, что этот вариант недоступен в андроиде, ведь это довольно распространенная потребность, которую решают другие технологии. Мне все еще нравится думать, что есть 5-й вариант в android, который я не нашел. Любой эксперт, который мог бы предоставить некоторую информацию по этой теме?
Спасибо.