Компоненты Android для отображения графика (узлы и ребра, в 2D)? - PullRequest
7 голосов
/ 20 мая 2011

Я нахожусь на начальной стадии разработки приложения для Android, похожего на программу «mindmap» (например, Thinking Space).Он показывает некоторые узлы графа (содержащие текст, возможно изображения) и ребра, которые их соединяют.Я могу позаботиться о графических алгоритмах, но у меня есть две неопределенности в отношении компонентов Android для отображения этих вещей:

  1. Расширенный граф будет довольно большим, поэтому пользователь должен иметь возможностьпрокручивать как вертикально, так и горизонтально.Я посмотрел на ScrollView и HorizontalScrollView, но они не могут прокручивать как вертикально, так и горизонтально.Поэтому я надеюсь узнать, какой контейнер верхнего уровня мне следует использовать.

  2. Я также хочу, чтобы график масштабировался с помощью жестов, чтобы пользователь мог увеличить небольшую частьграф.Но я также хочу, чтобы узлы графа были интерактивными, чтобы пользователь мог нажимать на них, вводить в них текст и перемещать их пальцами.Должен ли я реализовать каждый узел как отдельный объект View?Если да, то как мне сделать так, чтобы все узлы увеличивались вместе?

Спасибо.

1 Ответ

2 голосов
/ 20 мая 2011

Я бы определенно полагался на пользовательские представления для такого рода вещей, они дадут вам гораздо больше свободы и эффективности, чем использование стандартных макетов.

Реализация прокручиваемого представления - это довольно просто ,и реализация жеста повышения будет намного проще, если вы поддерживаете API> = 8 (см. ScaleGestureDetector).Впрочем, сделать элементы графика интерактивными и редактируемыми - это еще одна вещь.

Что-то гораздо лучше могло бы быть создание пользовательского макета, который бы содержал редактируемые элементы графика (пользовательские представления) и рисовал их отношения.Это было бы намного более изящно, чисто, расширяемо, ремонтопригодно и многоразово, но это потребовало бы намного большего проектирования.Тем не менее, я уверен, что это будет очень вознаграждено.

(Это был бы довольно амбициозный проект для меня, так что ... удачи!)

...