У меня есть приложение для рисования, в котором пользователь может рисовать линии пальцем, настраивать цвет, толщину, и т. д. Когда пользователь рисует , Я конвертирую скопированные точки X / Y из MotionEvent
в SVG Paths , а также создаю Android Path и затем рисую Android Path на экране с помощью a Canvas и фиксация пути SVG в базе данных приложения.
Я следую модели, использованной в FingerPaint , в которой строки «в процессе» отрисовываются на лету повторными вызовами ] invalidate ()
(и, таким образом, onDraw ()
), и после завершения строки и начала новой строки предыдущая строка (строки) рисуется в onDraw ()
из нижележащего Canvas
Bitmap
, при этом строки выполнения снова генерируют повторяющиеся повторные отрисовки.
Это отлично работает в этом приложении - пока вы не начнете вращать нижележащее Bitmap
, чтобы компенсировать поворот устройства, поддерживая возможность «увеличения» на поверхности рисования и, таким образом, необходимость масштабирования нижележащего Bi tmap
и т. д. Так, например, когда устройство повернуто, а рисунок увеличен, когда пользователь рисует, нам нужно масштабировать И повернуть растровое изображение в onDraw (), и это абсолютно скользит.
I Я посмотрел на SurfaceView
, но поскольку он по-прежнему использует тот же механизм Canvas
, я не уверен, что увижу заметное улучшение ... поэтому мои мысли обращаются к OpenGL. Я где-то читал, что OpenGL может выполнять вращение и масштабирование практически «бесплатно», и даже встречал слухи (третий комментарий) о том, что Canvas
может исчезнуть в будущих версиях.
По сути, в следующих версиях. , Я немного застрял между решениями Canvas
и OpenGL ... У меня есть приложение для 2D-рисования, которое, кажется, идеально подходит для модели Canvas
, когда находится в одном состоянии, так как нет постоянные перерисовки происходят как в игре (например, когда пользователь не рисует, мне не нужно перерисовывать), но когда пользователь рисует, мне нужна максимальная производительность, необходимая для выполнения некоторых все более сложных вещей с поверхность ...
Будем рады любым мыслям, указателям и предложениям.