Android: рисование и вращение на холсте

1

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

Проблема связана с разным размером X, Y в портретных/альбомных режимах. Если у пользователя есть холст, который заполняет экран (минус уведомление и заголовки), а в портретном режиме рисуется около нижней части холста (скажем, в точке 140, 460 на экране 320x480), когда экран перевернут на пейзаж и воссоздан из X, Y векторы, которые я сохранил, точка на 140 460 теперь выходит за пределы экрана (потому что экран теперь 480x320). Аналогично, если они рисуют точки в ландшафте вблизи правого края экрана и откидываются назад к портрету, эти точки будут за пределами.

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

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

Идеи, которые я/пытался включить:

  • блокировка для определенной ориентации - нормально, но ненависть заставляет пользователя к определенному предпочтению
  • блокировка определенной ориентации и скрытие заголовков и предупреждений, поэтому пользователю просто предоставляется большой пустой холст, который они могут использовать по своему усмотрению, но ненавижу, что панель уведомлений скрыта.

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

Любые мысли о решениях для этого?

Спасибо.

Теги:
canvas
coordinates
screen-rotation

1 ответ

0
Лучший ответ

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

  • 0
    Интересно ... какие-нибудь указатели о том, как создать холст (в моем случае холст удерживается внутри рамки) произвольного размера?
  • 0
    Вы не создаете холст вообще. Вы создаете закадровое растровое изображение размером N x N, где N = max (View.width, View.height). Вы отображаете события касания пользователя для рисования вызовов на холсте, полученном из Canvas c = new Canvas (offscreenBitmap). Затем вы просто рисуете свое закадровое изображение на холсте, предоставленном вам в пользовательском onDraw. Панорамирование включает рисование закадрового растрового изображения в другом месте на холсте onDraw.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню