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のキャンバスに描かれた長方形を回転させる方法はありますか?

4

2 に答える 2

10

使ってください

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

それ以外の場合は、後ですべての回転を補正する必要があります

于 2012-10-24T12:37:58.983 に答える
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);

問題は、テキストを回転させるためにキャンバス全体が回転していることです。だから私はキャンバスの回転後に長方形を描く必要があります。

于 2012-10-24T12:36:33.680 に答える