Я разработал лучший способ (не могу точно сказать, лучше он или нет, но этот метод должен быть простым) для многострочного текста на холсте, как в SurfaceView.
Вот будет код:
public class MultiLineText implements ObjectListener {
private String[] lines;
private float x, y, textSize;
private int textColor;
private float currentY;
public MultiLineText(String[] lines, float x, float y, float textSize, int textColor) {
this.lines = lines;
this.x = x;
this.y = y;
this.textSize = textSize;
this.textColor = textColor;
}
@Override
public void draw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(textColor);
paint.setTextSize(textSize);
currentY = y;
for (int i = 0; i < lines.length; i++) {
if (i == 0)
canvas.drawText(lines[i], x, y, paint);
else {
currentY = currentY + textSize;
canvas.drawText(lines[i], x, currentY, paint);
}
}
}
@Override
public void update() {
}
}
Импортируйте 2 класса с import android.graphics.Canvas;
и import android.graphics.Paint;
, чтобы исключить возникновение ошибок.
Для удобства создайте интерфейсный класс с именем ObjectListener (или назовите его как хотите, просто измените имя) и добавьте две следующие строки кода:
void draw(Canvas canvas);
void update();
Чтобы реализовать это, используйте этот код в методе View или Renderer on draw(Canvas canvas)
:
new MultiLineText(new String[]{
"This is a multi-line text.",
"It's setup is basic. Just do the following code,",
"and you would be done."
}, 150, 150, 32, Color.WHITE).draw(canvas);
Извините, я просто хотел реализовать этот текст, так что да... Вы можете изменить координаты X и Y со 150 по своему вкусу. Текст размером 26 удобочитаем, и он не слишком велик, потому что Canvas по умолчанию отображает мелкий текст.
person
BeChris 100
schedule
01.07.2021
Layout
вместо прямого вызоваCanvas.drawText
. В этом разделе вопросов и ответов показано, как использоватьStaticLayout
для рисования многострочного текста. - person Suragch   schedule 26.01.2017