Работа с большими размерами и настраиваемыми представлениями в Android - PullRequest
2 голосов
/ 17 ноября 2011

Я знаю, что это обсуждалось снова и снова, но я не могу найти решение, отвечающее моим потребностям.

Сценарий: Чтобы упростить объяснение, у меня есть пользовательский вид, который отображает два изображения: большое для фона и меньшее для колеса. Пользователь может вращать / масштабировать фоновое изображение с событиями 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();

Возможные решения: Я мог бы создать новый пользовательский вид, который мог бы только рисовать фоновое изображение и поверх него, помещать мой текущий вид и отправлять события касания, когда дело касается моего вида фонового изображения. Это позволит мне перерисовывать фоновое изображение только при необходимости. Есть еще идеи?

1 Ответ

2 голосов
/ 17 ноября 2011

У меня были похожие проблемы с производительностью, и я нашел решение, которое я описал здесь .Подобно тому, что вы уже предложили, в основном фон рисуется только один раз, а пользовательский ImageView обрабатывает все преобразования своих сенсорных событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...