public void SetData(string text)
{
Init();
UITools.SetCachedItemHide(mItems);
labstring.Clear();
ParseSymbol(text);
if(labstring == null || labstring.Count == 0)
return;
if (mGrid == null || mItem == null)
return;
for (int i = labstring.Count-1; i >=0; i--)
{
}
UITools.GridReposition(mGrid);
}
List<string> labstring = new List<string> ();
public void ParseSymbol(string text)
{
if (string.IsNullOrEmpty(text))
return ;
int limitHeight = 440;
basFont.RequestCharactersInTexture(text, fontsize, FontStyle.Normal);
CharacterInfo characterInfo;
int width = 0;
List<int> widths = new List<int>();
for (int i = 0; i < text.Length; i++)
{
char a = text[i];
basFont.GetCharacterInfo(text[i], out characterInfo, fontsize);
int advancewidth = characterInfo.advance;
width += characterInfo.advance;
widths.Add(width);
}
int idex = getNearString(widths, limitHeight);
string startstring = "";
string endstring = "";
for (int i = 0; i < text.Length; i++)
{
char a = text[i];
if (i <= idex)
{
startstring = startstring + a;
}
else
{
endstring = endstring + a;
}
}
labstring.Add(startstring);
if (endstring == "")
{
}
else
{
ParseSymbol(endstring);
}
}
public static int getNearString(List<int> words, int width)
{
int top = 100000;
int bottom = -100000;
int topidex = 0;
int bottomidex = 0;
for (int i = 0; i < words.Count; i++)
{
int a = words[i];
//找到离5最近的左边最小数
if (a < top && a >= width)
{
top = a;
topidex = i;
continue;
}
//找到离5最近的右边最大数
if (a > bottom && a <= width)
{
bottom = a;
bottomidex = i;
continue;
}
}
if (top == bottom)
{
return topidex;
}
if ((top - width) >= (width - bottom))
{
return bottomidex;
}
else
{
return topidex;
}
}
效果如图