Как может Drawable
загружаться из ресурса вращаться при его рисовании? Например, я хотел бы нарисовать стрелку и повернуть ее в разные стороны, когда она нарисована?
Поворот на Android
Ответ 1
Вам нужно использовать функции Bitmap и Canvas Class для подготовки drawable:
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 градусов по центру изображения.
Ответ 2
по существу он может быть сведен к нулю: сделать (n обратное) преобразование холста вместо преобразования drawable
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);
Ответ 3
Принятый ответ не работает для меня. У меня нет квадратного изображения, поэтому я немного изменил его код.
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));
Ответ 4
в основном это:
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