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