У меня есть приложение для рисования, в котором пользователь может рисовать линии пальцем, корректировать цвет, толщину и т.д. Когда пользователь рисует, я преобразую массивные точки X/Y из MotionEvent
в SVG Paths, а также создание пути Android, а затем рисунок Android Путь к экрану через холст и перенос пути SVG к базе данных приложений.
Я следую модели, используемой в FingerPaint, поскольку строки "в процессе" рисуются "на лету" повторными вызовами до invalidate()
(и, таким образом, onDraw()
), и как только линия будет завершена, и начнется новая строка, предыдущая строка (строки) будет вычерчена в onDraw()
из базового Canvas
Bitmap
, линии прогресса, снова повторяющие повторные розыгрыши.
Это прекрасно работает в этом приложении - пока вы не начнете вращать базовый Bitmap
, чтобы компенсировать вращение устройства, поддерживая возможность "увеличивать" на поверхности чертежа и тем самым увеличивать базовый Bitmap
и т.д. Например, при повороте устройства и масштабировании чертежа, когда пользователь рисует, нам нужно масштабировать и вращать наш битмап в onDraw(), и это абсолютно сканирование.
Я посмотрел на SurfaceView
, но поскольку это все еще использует тот же механизм Canvas
, я не уверен, что увижу заметное улучшение... поэтому мои мысли обращаются к OpenGL. Я где-то читал, что OpenGL может делать вращения и масштабировать по существу "бесплатно" и даже видеть слухи (третий комментарий), что Canvas
может исчезать в будущих версиях.
По сути, я немного застрял между решениями Canvas
и OpenGL... У меня есть приложение для 2D-рисования, которое идеально подходит модели Canvas
, когда в одном состоянии, так как нет постоянных повторных розыгрышей (например, когда пользователь не рисует, мне не нужен какой-либо повторный рисунок), но когда пользовательский чертеж IS, мне нужна максимальная производительность, необходимая для выполнения некоторых более сложных вещей с поверхности...
Приветствуем любые мысли, указатели и предложения.