現在、SurfaceViewにテキストを描画するために次のメソッドを使用しています。
canvas.drawText("someText", 0, 0, paint);
しかし、テキストが画面の幅を超えた場合はどうなりますか?テキストを描画できる領域を定義することはできますか?
したがって、文字列の幅が長方形の幅を超えると、テキストは上記のテキストの下に収まるようにフォーマットされます。
"sometext"
"text carried"
"on"
現在、SurfaceViewにテキストを描画するために次のメソッドを使用しています。
canvas.drawText("someText", 0, 0, paint);
しかし、テキストが画面の幅を超えた場合はどうなりますか?テキストを描画できる領域を定義することはできますか?
したがって、文字列の幅が長方形の幅を超えると、テキストは上記のテキストの下に収まるようにフォーマットされます。
"sometext"
"text carried"
"on"
この回答に基づいて、これがレイアウトサブクラスの用途であると思います。ドキュメントごと:
画面上の視覚要素のテキストレイアウトを管理する基本クラス。
編集されるテキストには、テキストの変更に応じて更新されるDynamicLayoutを使用します。変更されないテキストの場合は、StaticLayoutを使用します。
そして、各サブクラスには注意があります:
これは、ウィジェットがテキストのレイアウトを制御するために使用します。独自のウィジェットまたはカスタム表示オブジェクトを実装している場合、またはCanvas.drawText()を直接呼び出したくなる場合を除いて、このクラスを直接使用する必要はありません。
これはあなたがしていることとまったく同じように聞こえます。
基本的にはの代わりになりcanvas.drawText()
ます。これは次のように使用できます。
TextPaint tPaint = new TextPaint(paint);
StaticLayout sLayout = new StaticLayout(sText, tPaint, mWidth, widthToFill, Layout.Alignment.ALIGN_CENTER, 1.2f, 1.0f, false);
canvas.save();
canvas.translate(posX, posY);
sLayout.draw(canvas);
canvas.restore();