在Android中旋转drawable

Com*_*ish 18 graphics android

如何Drawable在绘制资源时从资源中加载?例如,我想绘制一个箭头,并且能够在绘制时将其旋转到面向不同的方向?

Zel*_*mir 20

您需要使用Bitmap和Canvas类函数来准备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);
Run Code Online (Sandbox Code Playgroud)

在此代码中,样本在图像中心上旋转90度.

  • 如果原始位图是正方形,那么可以很好地工作:)....如果它不是什么? (2认同)

jJ'*_*jJ' 10

本质上它可以归结为:做一个(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();
  //...
}
Run Code Online (Sandbox Code Playgroud)

如果你有BitmapDrawable,可能需要通过设置抗锯齿来提高输出质量

drawable.setAntialias(true);
Run Code Online (Sandbox Code Playgroud)