/**
* ʵ�������Զ�����
* �Զ���ҳ
*/
package com.yarin.android.Examples_05_06;
import java.util.Vector;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.view.KeyEvent;
public class TextUtil
{
int m_iTextPosX; //���Ƶ�x��
int m_iTextPosY; //���Ƶ�y��
int m_iTextWidth; //���ƿ��
int m_iTextHeight; //���Ƹ߶�
int m_iFontHeight; //����߶�
int m_ipageLineNum; //ÿһҳ��ʾ������
int m_iTextBGColor; // ������ɫ
int m_iTextColor; // ������ɫ
int m_iAlpha; //Alphaֵ
int m_iRealLine; // �ַ�����ʵ������
int m_iCurLine; //��ǰ��
String m_strText;
Vector m_String;
Paint m_paint;
int m_iTextSize;
public TextUtil()
{
m_paint = new Paint();
m_String = new Vector();
}
public TextUtil(String strText, int x, int y, int w, int h, int bgcolor, int txetcolor, int a, int iTextSize)
{
m_paint = new Paint();
m_String = new Vector();
m_strText = strText;
m_iTextPosX = x;
m_iTextPosY = y;
m_iTextWidth = w;
m_iTextHeight = h;
m_iTextBGColor = bgcolor;
m_iTextColor = txetcolor;
m_iTextSize = iTextSize;
m_iAlpha = a;
}
/**
* ��ʼ��
* @param strText Ҫ��ʾ���ַ���
* @param x x
* @param y y
* @param w w
* @param h h
* @param bgcolor ������ɫ
* @param txetcolor ���ֵ���ɫ
* @param a Alpha
* @param iTextSize �����С
*/
public void InitText(String strText, int x, int y, int w, int h, int bgcolor, int txetcolor, int a, int iTextSize)
{
m_iCurLine = 0;
m_ipageLineNum = 0;
m_iRealLine = 0;
m_strText = "";
m_iTextPosX = 0;
m_iTextPosY = 0;
m_iTextWidth = 0;
m_iTextHeight = 0;
m_iTextBGColor = 0;
m_iTextColor = 0;
m_iTextSize = 0;
m_iAlpha = 0;
m_String.clear();
SetText(strText);
SetRect(x, y, w, h);
SetBGColor(bgcolor);
SetTextColor(txetcolor);
SetFontSize(iTextSize);
SetAlpha(a);
SetPaint();
GetTextIfon();
}
/**
* ����Alpha
* @param a Alphaֵ
*/
public void SetAlpha(int a)
{
m_iAlpha = a;
}
/**
* ��Paint���Ե�����
*/
public void SetPaint()
{
m_paint.setARGB(m_iAlpha, Color.red(m_iTextColor), Color.green(m_iTextColor), Color.blue(m_iTextColor));
m_paint.setTextSize(m_iTextSize);
}
/**
* ��������ߴ�
* @param iTextSize
*/
public void SetFontSize(int iTextSize)
{
m_iTextSize = iTextSize;
}
/**
* ������ʾ�ı�������
* @param x
* @param y
* @param w
* @param h
*/
public void SetRect(int x, int y, int w, int h)
{
m_iTextPosX = x;
m_iTextPosY = y;
m_iTextWidth = w;
m_iTextHeight = h;
}
/**
* ���ñ�����ɫ
* @param bgcolor
*/
public void SetBGColor(int bgcolor)
{
m_iTextBGColor = bgcolor;
}
/**
* ����������ɫ
* @param txetcolor
*/
public void SetTextColor(int txetcolor)
{
m_iTextColor = txetcolor;
}
/**
* ɫ����Ҫ��ʾ���ַ���
* @param strText
*/
public void SetText(String strText)
{
m_strText = strText;
}
/**
* �õ��ַ�������Ϣ
* ������������ҳ������Ϣ
* �ڲ�����
*/
public void GetTextIfon()
{
char ch;
int w = 0;
int istart = 0;
FontMetrics fm = m_paint.getFontMetrics();
m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 2;
m_ipageLineNum = m_iTextHeight / m_iFontHeight;
for (int i = 0; i < m_strText.length(); i++)
{
ch = m_strText.charAt(i);
float[] widths = new float[1];
String srt = String.valueOf(ch);
m_paint.getTextWidths(srt, widths);
if (ch == '\n')
{
m_iRealLine++;
m_String.addElement(m_strText.substring(istart, i));
istart = i + 1;
w = 0;
}
else
{
w += (int) (Math.ceil(widths[0]));
if (w > m_iTextWidth)
{
m_iRealLine++;
m_String.addElement(m_strText.substring(istart, i));
istart = i;
i--;
w = 0;
}
else
{
if (i == (m_strText.length() - 1))
{
m_iRealLine++;
m_String.addElement(m_strText.substring(istart, m_strText.length()));
}
}
}
}
}
/**
* �����ַ���
* @param canvas
*/
public void DrawText(Canvas canvas)
{
for (int i = m_iCurLine, j = 0; i < m_iRealLine; i++, j++)
{
if (j > m_ipageLineNum)
{
break;
}
canvas.drawText((String) (m_String.elementAt(i)), m_iTextPosX, m_iTextPosY + m_iFontHeight * j, m_paint);
}
}
/**
* ��ҳ�Ȱ�������
* @param keyCode
* @param event
* @return
*/
public boolean KeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_DPAD_UP)
{
if (m_iCurLine > 0)
{
m_iCurLine--;
}
}
else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN)
{
if ((m_iCurLine + m_ipageLineNum) < (m_iRealLine - 1))
{
m_iCurLine++;
}
}
return false;
}
}