public static Vector wrapToLines(String text, Font f, int maxWidth) {
Vector lines = new Vector ();
boolean paragraphFormat = false;
if (text == null) {
return lines;
}
if (f.stringWidth(text) < maxWidth) {
lines.add(text);
return lines;
} else {
char chars[] = text.toCharArray();
int len = chars.length;
int count = 0;
int charWidth = 0;
int curLinePosStart = 0;
while (count < len) {
if ((charWidth += f.charWidth(chars[count])) > (maxWidth - 4) || count == len - 1) // wrap to next line
{
if (count == len - 1) {
count++;
}
String line = new String(chars, curLinePosStart, count - curLinePosStart);
if (paragraphFormat) {
int lastSpacePosition = line.lastIndexOf(" ");
String l = new String(chars, curLinePosStart, (lastSpacePosition != -1) ? lastSpacePosition + 1 : (count == len - 1) ? count - curLinePosStart + 1 : count - curLinePosStart);
lines.add(l);
curLinePosStart = (lastSpacePosition != -1) ? lastSpacePosition + 1 : count;
} else {
lines.add(line);
curLinePosStart = count;
}
charWidth = 0;
}
count++;
}
return lines;
}
}
而只是运行 for 循环
int y=0;
int linespacing=4;
for(int i=0;i<lines.size();i++)
{
g.drawString((String)lines.get(i),10,y,0);
y+=(i!=lines.size()-1)?(font.getHeight()+linespacing):0;
}
享受:)
This is my code i used in my app it will wrapped lines vector and u can draw at any X point in canvas.
public static Vector wrapToLines(String text, Font f, int maxWidth) {
Vector lines = new Vector ();
boolean paragraphFormat = false;
if (text == null) {
return lines;
}
if (f.stringWidth(text) < maxWidth) {
lines.add(text);
return lines;
} else {
char chars[] = text.toCharArray();
int len = chars.length;
int count = 0;
int charWidth = 0;
int curLinePosStart = 0;
while (count < len) {
if ((charWidth += f.charWidth(chars[count])) > (maxWidth - 4) || count == len - 1) // wrap to next line
{
if (count == len - 1) {
count++;
}
String line = new String(chars, curLinePosStart, count - curLinePosStart);
if (paragraphFormat) {
int lastSpacePosition = line.lastIndexOf(" ");
String l = new String(chars, curLinePosStart, (lastSpacePosition != -1) ? lastSpacePosition + 1 : (count == len - 1) ? count - curLinePosStart + 1 : count - curLinePosStart);
lines.add(l);
curLinePosStart = (lastSpacePosition != -1) ? lastSpacePosition + 1 : count;
} else {
lines.add(line);
curLinePosStart = count;
}
charWidth = 0;
}
count++;
}
return lines;
}
}
and while just run in for loop
int y=0;
int linespacing=4;
for(int i=0;i<lines.size();i++)
{
g.drawString((String)lines.get(i),10,y,0);
y+=(i!=lines.size()-1)?(font.getHeight()+linespacing):0;
}
void paint(Graphics _g) {
String t = "text to draw";
int px_consumed = _g.getFont().substringWidth(t, 0, t.length())}
}
You need to calculate the width of the string to be drawn yourself and start a new line (split the string) each time you reach the max width of the canvas.
void paint(Graphics _g) {
String t = "text to draw";
int px_consumed = _g.getFont().substringWidth(t, 0, t.length())}
}
发布评论
评论(2)
这是我在应用程序中使用的代码,它将包裹线条向量,您可以在画布中的任何 X 点绘制。
而只是运行 for 循环
享受:)
This is my code i used in my app it will wrapped lines vector and u can draw at any X point in canvas.
and while just run in for loop
Enjoy :)
需要自己计算要绘制的字符串的宽度并另起一行
(分割字符串)每次达到画布的最大宽度时。
You need to calculate the width of the string to be drawn yourself and start a new line
(split the string) each time you reach the max width of the canvas.