Java代码
public class CYTextView extends TextView {
public static int m_iTextHeight; //文本的高度
public static int m_iTextWidth;//文本的宽度
private Paint mPaint = null;
private String string="";
private float LineSpace = 0;//行间距
public CYTextView(Context context, AttributeSet set)
{
super(context,set);
TypedArray typedArray = context.obtainStyledAttributes(set, R.styleable.CYTextView);
int width = typedArray.getInt(R.styleable. CY TextView_textwidth, 320);
float textsize = typedArray.getDimension(R.styleable. CY TextView_textSize, 24);
int textcolor = typedArray.getColor(R.styleable. CY TextView_textColor, -1442840576);
float linespace = typedArray.getDimension(R.styleable. CY TextView_lineSpacingExtra, 15);
int typeface = typedArray.getColor(R.styleable. CY TextView_typeface, 0);
typedArray.recycle();
//设置 CY TextView的宽度和行间距
m_iTextWidth=width;
LineSpace=linespace;
// 构建paint对象
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(textcolor);
mPaint.setTextSize(textsize);
switch(typeface){
case 0:
mPaint.setTypeface(Typeface.DEFAULT);
break;
case 1:
mPaint.setTypeface(Typeface.SANS_SERIF);
break;
case 2:
mPaint.setTypeface(Typeface.SERIF);
break;
case 3:
mPaint.setTypeface(Typeface.MONOSPACE);
break;
default:
mPaint.setTypeface(Typeface.DEFAULT);
break;
}
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
char ch;
int w = 0;
int istart = 0;
int m_iFontHeight;
int m_iRealLine=0;
int x=2;
int y=30;
Vector m_String=new Vector();
FontMetrics fm = mPaint.getFontMetrics();
m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + (int)LineSpace;//计算字体高度(字体高度+行间距)
for (int i = 0; i < string.length(); i++)
{
ch = string.charAt(i);
float[] widths = new float[1];
String srt = String.valueOf(ch);
mPaint.getTextWidths(srt, widths);
if (ch == '/n'){
m_iRealLine++;
m_String.addElement(string.substring(istart, i));
istart = i + 1;
w = 0;
}else{
w += (int) (Math.ceil(widths[0]));