【发布时间】:2011-01-21 19:47:35
【问题描述】:
从资源加载的Drawable 在绘制时如何旋转?比如我想画一个箭头,画的时候可以旋转到不同的方向?
【问题讨论】:
-
问题大相径庭,但我认为答案可能是相关的。
-
这能回答你的问题吗? Rotating Image on A canvas in android
从资源加载的Drawable 在绘制时如何旋转?比如我想画一个箭头,画的时候可以旋转到不同的方向?
【问题讨论】:
你需要使用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 度旋转。
【讨论】:
基本上可以归结为:做一个(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);
【讨论】:
接受的答案对我不起作用。我有非方形图像,所以我稍微更改了他的代码。
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));
【讨论】:
基本上是这样的:
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
【讨论】: