Я создаю приложение для рисования для планшетов, и мне интересно, как лучше всего обрабатывать холст чертежа, относящийся к изменениям ориентации экрана. Программа рисования отслеживает входные данные пользователя и сохраняет их в виде векторов, закрепленных координатами X, Y.Android: рисование и поворот на холсте
Вопрос относится к разным размерам X, Y в портретных/ландшафтных режимах. Если у пользователя есть холст, который заполняет экран (минус уведомление и заголовки), а в портретном режиме рисуется около нижней части холста (скажем, в точке 140, 460 на экране 320x480), когда экран перевернут на пейзаж и воссоздан из X, Y векторы, которые я сохранил, точка в 140 460 теперь выходит за границы экрана (потому что экран теперь 480x320). Аналогично, если они рисуют точки в ландшафте возле правого края экрана и откидываются назад к портрету, эти точки будут за пределами границ.
Я рассмотрел решения этого, и очевидным кажется, что нужно просто заблокировать экран до определенной ориентации. Ряд приложений для рисования, которые я загрузил из Marketplace, обрабатывает его таким образом.
Как я это проектирование для планшета, я хотел бы дать пользователю возможность рисовать, как им нравится, но сохранить некоторое здравомыслие, когда дело доходит до экрана границ и т.д.
Идеи I нас были/пробовали включать:
- замка к определенной ориентации - нормально, но ненавидит принуждение пользователя к определенному выбору
- запирающих к определенной ориентации и скрытие заголовков и уведомлений баров, так что пользователь просто представил большой пустой холст, который они могут использовать по своему усмотрению, но ненавижу, что панель уведомлений h eld
Я подумал о возможности сокрытия заголовка, показывая уведомление, позволяя изменить ориентацию, а затем, если экран повернут на пейзаж, повернув холст обратно на портрет, но когда панель навигации перемещается от того, что будет были сверху в портрете с правой стороны в ландшафте, я все равно получаю те же X, Y ограничивающие проблемы, только в гораздо меньшей степени (ширина панели уведомлений эффективно).
Любые мысли о решениях для этого?
Спасибо.
Интересно ... любые указатели на то, как создать холст (в моем случае, холст удерживается внутри рамки) произвольного размера? –
Вы вообще не создаете холст. Вы создаете экранное растровое изображение размером N x N, где N = max (View.width, View.height). Вы сопоставляете события касания пользователя, чтобы рисовать вызовы на холсте, полученные из Canvas c = new Canvas (offscreenBitmap). Затем вы просто нарисуете свой экранный растровый рисунок на холсте, предоставленном вам в пользовательском onDraw. Панорамирование включает в себя рисование вырезанного растрового изображения в другое место на холсте onDraw. – Josh
Получил это. Проблема в том, что я рисую на холст в SurfaceView/thread, где сам холст возвращается из SurfaceHolder через canvas = mSurfaceHolder.lockCanvas (null); Я не знаю, где я могу связать их вместе. –