Android-paint повернул растровое изображение в определенное место на холсте
хорошо, может быть, я что-то пропустил здесь, но я застрял на несколько часов. Я создаю приложение, в котором пользователь рисует размерную линию поверх изображения. Теперь я хочу нарисовать также некоторые точки выбора, которые показывают, что линия выбрана. Эти точки являются определенным растровым изображением, которое должно находиться в конце линии (после стрелки) и поворачиваться в соответствии со стрелкой. Я создал класс DrawSelectionPoint, который расширяет представление, и я могу повернуть растровое изображение с чем-то вроде это:
selectionPoint = BitmapFactory.decodeResource(context.getResources(),
R.drawable.selectionpoint);
Matrix matrix = new Matrix();
matrix.postRotate((float)Math.toDegrees(angle));
canvas.drawBitmap(selectionPoint, matrix, null);
(где угол-угол линии) таким образом, мое растровое изображение поворачивается так, как я хочу, но оно нарисовано на точке 0,0 (вверху слева от экрана).
Если я использую что-то вроде
canvas.save();
canvas.rotate();
canvas.drawBitmap(selectionPoint, x, y, null);
canvas.restore();
тогда мне слишком сложно нарисовать растровое изображение в точном месте, которое я хочу (так как я рисую на повернутом холсте, который я поворачиваю обратно). Я попробовал некоторые евклидовы преобразования вращения, но мне не повезло.
есть ли способ применить вращение матрицы, а также дать точки, где мне нужно растровое изображение для рисования? Заранее спасибо!
1 ответов
предположим, вы хотите нарисовать растровое изображение, где центр растрового изображения будет в (px,py) координаты холста. Имейте переменную-член
Matrix matrix = new Matrix();
и в вашем onDraw:
matrix.reset();
matrix.postTranslate(-bitmap.getWidth() / 2, -bitmap.getHeight() / 2); // Centers image
matrix.postRotate(angle);
matrix.postTranslate(px, py);
canvas.drawBitmap(bitmap, matrix, null);