Я знаю, что это обсуждалось снова и снова, но я не могу найти решение, отвечающее моим потребностям.
Сценарий: Чтобы упростить объяснение, у меня есть пользовательский вид, который отображает два изображения: большое для фона и меньшее для колеса. Пользователь может вращать / масштабировать фоновое изображение с событиями onTouch. Он также может вращать изображение Колеса, чтобы сделать некоторые операции. Все делается в пользовательском представлении, а не в SurfaceView, потому что оно должно быть прозрачным.
Проблема: С помощью onDraw () мне всегда нужно проверять, какое вращение / масштабирование имеет фоновое изображение, масштабировать / поворачивать его, а затем рисовать. Если фоновое изображение меньше, скажем, 512x512 Вращение изображения Колеса в порядке. Если фоновое изображение больше, 1280x1707, поворот изображения колеса замедляется. Поэтому я предполагаю, что манипулирование и вращение большого изображения в фоновом режиме для каждого onDraw () вызывает проблемы с производительностью, когда в основном фоновое изображение следует перерисовывать только тогда, когда пользователь манипулирует им.
Вращение выполняется примерно так:
canvas.save();
float dx = (maxX + minX) / 2;
float dy = (maxY + minY) / 2;
drawable.setBounds((int) minX, (int) minY, (int) maxX, (int) maxY);
canvas.translate(dx, dy);
canvas.rotate(angle * 180.0f / (float) Math.PI);
canvas.translate(-dx, -dy);
drawable.draw(canvas);
canvas.restore();
Возможные решения: Я мог бы создать новый пользовательский вид, который мог бы только рисовать фоновое изображение и поверх него, помещать мой текущий вид и отправлять события касания, когда дело касается моего вида фонового изображения. Это позволит мне перерисовывать фоновое изображение только при необходимости. Есть еще идеи?