/**
* 获取一行的字符
*
* @param MaxWidth
* @param str
* @return
*/
private String getLineText(int MaxWidth, String str) {
// 真实行
StringBuffer trueStringBuffer = new StringBuffer();
// 临时行
StringBuffer tempStringBuffer = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
String add = "";
// 如果c是字母需要考虑英文单词换行功能
if (!isChinese(c) && isENWordStart(str, i)) {
int place = getNextSpecePlace(i, str);
// 找到下一个空格
if (place > -1) {
add = str.substring(i, place) + " ";
if (getPaint().measureText(add) > MaxWidth) {
add = "" + c;
} else {
i = place;
}
} else {
add = "" + c;
}
} else {
add = "" + c;
}
tempStringBuffer.append(add);
String temp = tempStringBuffer.toString();
float width = getPaint().measureText(temp.toString());
if (width <= MaxWidth) {
trueStringBuffer.append(add);
} else {
break;
}
}
return trueStringBuffer.toString();
}
最后把每行字放到ArrayList里保存以便ondraw()里使用:
/**
* 生成多行字符串列表
*
* @param MaxWidth
*/
public void generateTextList(int MaxWidth) {
lineStrings = new ArrayList();
String remain = scrollText;
while (!remain.equals("")) {
String line = getLineText(MaxWidth, remain);
lineStrings.add(line);
remain = remain.substring(line.length(), remain.length());
}
};
2.测量view的长度和高度、能否滚动的判断条件
说到高度在这里我要提两个概念,
首先是view的高度,即显示这个view所需要的高度
其它是显示所有文字所需要的高度,这里我用absloutHeight变量