У меня проблема с получением правильного поворота растрового изображения.У меня есть SurfaceView с несколькими растровыми изображениями.Эти растровые изображения существуют внутри массива и с помощью цикла for я вызываю canvas.drawBitmap для каждого из них в методе onDraw.
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
for (int i = 0; i < jumper.size(); i++) {
canvas.drawBitmap(jumper.get(i).getGraphic(), jumper.get(i)
.getCoordinates().getX(), jumper.get(i).getCoordinates()
.getY(), null);
}
}
Я пытаюсь заставить пользователя выбрать конкретное растровое изображение (одно из многих), а затем повернуть это растровое изображение, пока пользователь проводит пальцем по экрану.Итак, вот код вращения.На данный момент я просто использую значок андроида по умолчанию (72x72px), существующий в произвольной позиции где-то рядом с центром экрана.
private void rotateJumper(int direction) {
Matrix matrix = new Matrix();
Bitmap source = jumper.get(selectedJumperPos).getGraphic();
matrix.postRotate(direction, source.getWidth() / 2,
source.getHeight() / 2);
int x = 0;
int y = 0;
int width = 72;
int height = 72;
Bitmap tempBitmap = Bitmap.createBitmap(source, x, y, width, height,
matrix, true);
jumper.get(selectedJumperPos).setGraphic(tempBitmap);
}
Целочисленное направление равно +1 или -1 в зависимости от направленияперетаскивания пальца.Таким образом, изображение должно поворачиваться на 1 градус для каждого события MotionEvent.ACTION_MOVE.
Вот проблемы:
- Изображение не вращается вокруг центра изображения.CW вращается вокруг нижнего левого угла.Вращения против часовой стрелки центрируются вокруг правого верхнего угла.
- Поскольку оно не вращается вокруг центра, изображение поворачивается за пределы своих начальных границ и в конечном итоге исчезает.
- Изображение становится размытым при вращении.
Буду признателен за любую помощь, которую вы мне можете оказать.
Спасибо!