2011-01-21 12 views
16

リソースからロードされたDrawableは、描画時にどのように回転することができますか?例えば、私は矢印を描き、描かれたときにそれを異なる方向に回転させたいと思っていますか?Androidでドロワーブルを回転する

+0

[どのように私はのMapViewで駆動方向を示す矢印を描くことができますか?]の可能複製(http://stackoverflow.com/questions/4331794/how-can-i-draw-an-arrow-showing - 運転中の地図表示) – Jonas

+0

質問は全く異なりますが、その答えは関連していると思います。 – Computerish

答えて

20

あなたが描画可能な準備をビットマップとキャンバスクラスの機能を使用する必要があります。

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度の回転が生じる。

+0

OK、画像を半透明にする必要がある場合、またはズーム機能が必要な場合は、これもチェックしてください。http://stackoverflow.com/questions/4688306/how-can-i-make-image-opaque-to-some-レベル/ 4689624#4689624 – Zelimir

+2

元のビットマップが正方形であればうまく動作します。 – Jay

+0

私にとってもうまく動作します。遭遇する問題は何ですか? – Zelimir

0

基本的にこの:

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

+1

質問者が望んでいたものではなく、一連の画像の間を回転します.1枚の画像を平面的に回転させたかったのです。 – fredley

+0

実際には、トゥイーンアニメーションを使用して(1つのDrawableで)回転を実行できます。 http://developer.android.com/guide/topics/resources/animation-resource.html#Tween – edthethird

+0

エド、サポートに感謝します。 –

9

本質的にそれまで沸騰させることができる:あなたがBitmapDrawableを持っている場合、

をアンチエイリアス設定することにより、出力の品質を向上することが望ましいかもしれない(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(); 
    //... 
} 

を形質転換

drawable.setAntialias(true); 
+0

私はこれが今最も効率的な解決策だと思っています –

+0

実際にcanvas.rotate()はdrawableを描画する前に完了しています。 – Ridcully

+0

あなたはonMeasure関数の実装を見逃していませんか? –

2

私にとっては受け入れられた答えはありません。正方形でない画像があるので、コードを少し変更しました。

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)); 
関連する問題