2012-10-24 143 views
4

我使用下面的代碼段如何在Android中旋轉在畫布上繪製的矩形?

 Rect rect = new Rect(); 
     paint.getTextBounds(text, 0, text.length(), rect); 
     canvas.translate(xPosition + position.getX(), yPosition + position.getY()); 
     paint.setColor(Color.BLUE); 
     paint.setStyle(Style.STROKE); 
     canvas.drawRect(rect, paint); 
     paint.setStyle(Style.FILL); 
     paint.setColor(text_color); 
     canvas.translate(-(xPosition + position.getX()), -(yPosition + position.getY())); 
     canvas.rotate(getDegreesFromRadians(angle), xPosition + position.getX() + rect.exactCenterX(), yPosition + position.getY() + rect.exactCenterY()); 
     canvas.drawText(text, xPosition + position.getX(), yPosition + position.getY(), paint); 

這段代碼使用文本旋轉的護理借鑑Android的畫布上的文字和它工作正常。我正在使用上面的代碼在文本週圍繪製一個藍色矩形。現在我的問題是矩形不隨文本旋轉。它仍然是一樣的。有什麼辦法來旋轉在Android畫布中繪製的矩形?

回答

2

我發現我自己的答案。我用下面的代碼

Rect rect = new Rect(); 
     paint.setColor(text_color); 
     paint.setStyle(Style.FILL); 
     paint.getTextBounds(text, 0, text.length(), rect); 
     canvas.translate(xPosition + position.getX(), yPosition + position.getY()); 
     canvas.translate(-(xPosition + position.getX()), -(yPosition + position.getY())); 
     canvas.rotate(getDegreesFromRadians(angle), xPosition + position.getX() + rect.exactCenterX(), yPosition + position.getY() + rect.exactCenterY()); 
     canvas.drawText(text, xPosition + position.getX(), yPosition + position.getY(), paint); 
     paint.getTextBounds(text, 0, text.length(), rect); 
     canvas.translate(xPosition + position.getX(), yPosition + position.getY()); 
     paint.setColor(Color.BLUE); 
     paint.setStyle(Style.STROKE); 
     paint.setStrokeWidth(4); 
     rect = new Rect(rect.left - 10, rect.top - 10, rect.right + 10, rect.bottom + 10); 
     canvas.drawRect(rect, paint); 

的事情是整個畫布旋轉旋轉文本。所以我只需要在畫布旋轉後繪製矩形。

+0

你是怎麼計算的角度,因爲我想在用戶的觸摸基礎上旋轉矩形 –

+0

嘿@NirmalPrajapat我偶然發現你的問題,有一個快速的答案,我可以給你從工作拷貝我已經做以前,希望它是有用的: Math.toDegrees(Math.atan2(Y - sdo.y,X - sdo.x))+ 40 ...其中x和y是觸摸位置(我使用拖動手柄ov在圖形上是erlay),sdo是旋轉的位圖,x和y是位圖的中心,40常量是我的拖動手柄位於圖形頂部的角度,即:起點。 – ZengoTim

+0

謝謝@ZengoTim,但我解決了:) –

10

請使用

canvas.save(); 
canvas.rotate(); 
//stuff to draw that should be rotated 
canvas.restore(); 

否則你必須補償每次旋轉之後