Я провел где-то вчера, борясь с макетами Android (... или лучше настраиваемых макетов). Для общих целей формы из макетов коробки, которые предлагают андроиды, более чем достаточно. Но когда дело доходит до более сложных вариантов использования (давайте возьмем пример карусели с перекрытием изображений, которые лежат на эллиптическом пути), я быстро понял ограничение и сложность API-интерфейсов Android. Это был мой подход:Пользовательский макет Android
Использование из макетов коробки не вариант (многим неуправляемым вопросам обращаться), однако потребность графических объектов, которые могут быть добавлены в контейнер (скажем, ImageView к примеру) необходимо для того, чтобы легко выполнять трансляцию, поворот и т. д. через встроенную анимацию.
AbsoluteLayout кажется наиболее подходящим для этой цели. Он позволяет добавлять производные объекты просмотра и писать собственный алгоритм для их размещения. Но ... это устарело. Это позор! Кто хочет использовать устаревшую apis?
Следующей наиболее разумной вещью является написать собственный макет, подклассифицирующий мистическую ViewGroup .. и вот здесь все разваливается (по крайней мере, для меня). Это сложно, вводящим в заблуждение и сложным, чтобы сделать это так же, как писать собственный собственный макет для качания (я действительно делал это много лет назад, и я помню, чтобы быть проще).
После этого (под воздействием отчаяния) подклассификация вида, переопределение метода onDraw и рисования непосредственно на холсте кажется единственным прямым решением (хотя это напоминает мне дни java2D ... долгие часы, потраченные на достижение максимум 1% вашего проекта), но затем вы отказываетесь от удобных встроенных API-интерфейсов анимации, которые вы хотите применить к графике, нарисованной на холсте.
Вывод таков, что, если я не пропустил что-то, текущий андроид архитектура немного далека от парадигмы программирования, предлагаемой некоторых других технологиями пользовательского интерфейса, таких как флэш-память или JavaFX (я могу легко реализовать описанную выше карусель в javafx и flash). Причина в том, что в javafx, например, объект Scene (сопоставимый с концепцией View and android) предлагает по умолчанию абсолютный макет. Затем вы можете применить другие из макетов коробки, если хотите. Но для сценариев, где требуется настраиваемый макет, вам не нужно ничего делать.
Я немного удивляюсь, что эта опция недоступна в андроиде, ведь это довольно распространенная потребность, которую решают другие технологии ui. Мне все еще нравится думать, что есть 5-й вариант в android, который я не нашел. Любой специалист, который мог бы предоставить некоторую информацию по этой теме?
Спасибо.
Отличный вопрос! Heres мой почти такой же вопрос: http://stackoverflow.com/questions/4953351/android-how-to-draw-a-letter-at-a-specific-point ... Почему все эти взгляды и анимации, если вы не можете их использовать? – Mark