Вращение рисованного в Android - PullRequest
17 голосов
/ 21 января 2011

Как можно вращать Drawable, загруженный из ресурса, когда он рисуется?Например, я хотел бы нарисовать стрелку и иметь возможность поворачивать ее в разные стороны при рисовании?

Ответы [ 4 ]

20 голосов
/ 22 января 2011

Для подготовки к рисованию необходимо использовать функции Bitmap и Canvas Class:

Bitmap bmpOriginal = BitmapFactory.decodeResource(this.getResources(), R.drawable.image2);
Bitmap bmResult = Bitmap.createBitmap(bmpOriginal.getWidth(), bmpOriginal.getHeight(), Bitmap.Config.ARGB_8888);
Canvas tempCanvas = new Canvas(bmResult); 
tempCanvas.rotate(90, bmpOriginal.getWidth()/2, bmpOriginal.getHeight()/2);
tempCanvas.drawBitmap(bmpOriginal, 0, 0, null);

mImageView.setImageBitmap(bmResult);

В этом примере кода происходит поворот на 90 градусов над центром изображения.

10 голосов
/ 11 августа 2011

по существу это можно свести к следующему: выполнить (n обратное) преобразование холста вместо преобразования рисованного

private BitmapDrawable drawable; // or Drawable

protected void onDraw(Canvas canvas) { // inherited from View 
  //...
  canvas.save();
  canvas.rotate(degrees, pivotX, pivotY);
  drawable.draw(canvas);
  canvas.restore();
  //...
}

если у вас есть BitmapDrawable, может быть желательно повысить качество вывода, установив сглаживание

drawable.setAntialias(true);
2 голосов
/ 01 июня 2016

Принятый ответ не работает для меня. У меня не квадратное изображение, поэтому я немного изменил его код.

private Bitmap rotateDrawable(@DrawableRes int resId) {
    Bitmap bmpOriginal = BitmapFactory.decodeResource(getResources(), resId);
    Bitmap bmpResult = Bitmap.createBitmap(bmpOriginal.getHeight(), bmpOriginal.getWidth(), Bitmap.Config.ARGB_8888);
    Canvas tempCanvas = new Canvas(bmpResult);
    int pivot = bmpOriginal.getHeight() / 2;
    tempCanvas.rotate(90, pivot, pivot);
    tempCanvas.drawBitmap(bmpOriginal, 0, 0, null);
    return bmpResult;
}

mImageView.setImageBitmap(rotateDrawable(R.drawable.some_image));
0 голосов
/ 21 января 2011

по сути это:

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

ссылка на источник:

http://developer.android.com/guide/topics/graphics/2d-graphics.html#tween-animation

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