I found my own answer. I used the following code
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);
The fact is that the entire canvas rotates to rotate the text. So I just need to draw a rectangle after turning the canvas.
source share