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);