2011-01-28 3 views
1

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

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

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

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

Идеи I нас были/пробовали включать:

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

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

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

Спасибо.

ответ

0

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

+0

Интересно ... любые указатели на то, как создать холст (в моем случае, холст удерживается внутри рамки) произвольного размера? –

+0

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

+0

Получил это. Проблема в том, что я рисую на холст в SurfaceView/thread, где сам холст возвращается из SurfaceHolder через canvas = mSurfaceHolder.lockCanvas (null); Я не знаю, где я могу связать их вместе. –