嗨旋轉有問題。我目前在畫布上繪製幾個對象。目前這個「對象」只是位圖。在計算旋轉並將其傳遞給Matrix後,我不得不創建一個新的位圖來旋轉它。一個小片段將clearify這樣的:旋轉'可以在畫布上繪製的東西'
public void onDraw(Canvas canvas){
mMatrix = new Matrix();
mMatrix.postRotate(getRotation());
Bitmap rotateBmp = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), mMatrix, true);
canvas.drawBitmap(rotateBmp, mCoords.x -(mBitmap.getWidth()/2), mCoords.y - (mBitmap.getHeight()/2), null);
rotateBmp.recycle();
}
我所能做的,以節省內存在rotateBmp
調用循環,它會正常運行的大部分時間。讓我們假設我有10個位圖'對象'我想旋轉。這意味着我必須保留十個Bitmaps作爲「示例」,並在每個繪製週期中創建十個新的位圖以及一個額外的新矩陣(沒有找到「重置」它的方法)。這聽起來很奇怪。有沒有另外一種方法,可以在飛行中創建'可以在畫布上繪製的東西'(無XML),同時保持旋轉的控制。任何想法都非常受歡迎。如果它的View,Drawable或其他CustomClass無關緊要。也許重要的是getRotation
對於每一個應該繪製的「東西」都是一樣的。最佳做法是什麼?
這不會讓我的位圖的位置。他們跑「出來的畫面」,如果我改變了getRotation'的'結果...讓我們假設:我在(0,0)處繪製位圖,然後將畫布旋轉-90度:我的位圖將被推出屏幕 – 2012-04-30 08:35:42
這是因爲旋轉的錨點是左上角的點(0,0 )。如果您想要在圖像的中心錨定一個旋轉,您必須發佈翻譯畫布以模擬作爲錨點的中心。不幸的是,我在幾何學上很糟糕,所以我不確定你需要應用的算法,但這是你需要做的。 – 2012-04-30 08:38:58