2011-12-14 2 views
4

Я работаю над приложением для Android, которое требует двумерного графического представления с большим набором объектов. Вот то, что я в основном нужно для отображения:2D-графическая библиотека для Android

enter image description here

В моем случае, может быть сотни пространственно распределенных объектов. Это представление будет вести себя как карта, поэтому пользователь может прокручивать по горизонтали и по вертикали, приближать и уменьшать масштаб. Он также требует обработки событий кликов, поэтому пользователь может щелкнуть любой треугольник, и затем я должен отобразить некоторую расширенную информацию, связанную с этим конкретным треугольником.

Я больше всего волнует три вещи:

  • В случае, если я перерисовать все объекты за в моем onDraw() обработчик, который будет очень медленным. Кроме того, есть случаи, когда мне даже не нужно рисовать все эти объекты, поскольку некоторые из них невидимы в зависимости от уровня масштабирования и положения прокрутки. Для этого требуется использование четырехъядерных деревьев, которые я не хочу реализовывать вручную.
  • Все эти объекты определены как (x, y, rotation, type), поэтому в случае, если клиент решит, что нам нужна кнопка «показать все», мне придется реализовать функциональность для вычисления ограничивающих прямоугольников.
  • Мне нужно иметь возможность обрабатывать события щелчка и (возможно) перетаскивать для всех этих фигур.

Есть ли библиотека, которая может помочь мне в решении этих задач? Просто не хотите тратить 3 дня на вещи, которые, я считаю, уже были реализованы.

ответ

2

Все методы в классе Canvas пакета android.graphics должны быть достаточными. Canvas делает обрезку (это означает, что команды рисования отбрасываются, если они не видны), поэтому, если изображение статично, вы можете отобразить его в Picture и нарисовать его на onDraw().

Я думаю, что методы рисования имеют методы для вычисления границ и возврата их. См. Path's computeBounds(RectF bounds, boolean exact).

+0

Это действительно ужасный подход, но поскольку я ничего не нашел, используя его :-( – agibalov

+1

Извините, я не мог предоставить вам библиотеку, которая делает то, что вам нужно, всего за игровым движком. 'Canvas' делает хорошую работу оптимизации вызовов рисования, а главное узкое место почти всегда заполняется. – Jasoneer

Смежные вопросы