package com.dcs.tools;

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 {

privatefloat mTextPosx = 0;// x坐标
privatefloat mTextPosy = 0;// y坐标
privatefloat mTextWidth = 0;// 绘制宽度
privatefloat mTextHeight = 0;// 绘制高度
private intmFontHeight = 0;// 绘制字体高度
private intmPageLineNum = 0;// 每一页显示的行数
private intmCanvasBGColor = 0;// 背景颜色
private intmFontColor = 0;// 字体颜色
private intmAlpha = 0;// Alpha值
private intmRealLine = 0;// 字符串真实的行数
private intmCurrentLine = 0;// 当前行
private intmTextSize = 0;// 字体大小
privateString mStrText = "";
privateVector<String> mString = null;
privatePaint mPaint = null;

publicTextUtil(String StrText, float x,float y, float w, float h, int bgcolor,
int textcolor, int alpha, int textsize) {
mPaint = new Paint();
mString = new Vector<String>();
this.mStrText = StrText;
this.mTextPosx = x;
this.mTextPosy = y;
this.mTextWidth = w;
this.mTextHeight = h;
this.mCanvasBGColor = bgcolor;
this.mFontColor = textcolor;
this.mAlpha = alpha;
this.mTextSize = textsize;
}

publicvoid initText() {
mString.clear();// 清空Vector
// 对画笔属性的设置
mPaint.setARGB(this.mAlpha,Color.red(this.mFontColor), Color
.green(this.mFontColor),Color.blue(this.mFontColor));
mPaint.setTextSize(this.mTextSize);
//mPaint.setColor(Color.BLUE);
mPaint.setAntiAlias(true);

this.getTextIfon();
}


public voidgetTextIfon() {
char ch;
int w = 0;
int istart = 0;
FontMetrics fm = mPaint.getFontMetrics();// 得到系统默认字体属性
mFontHeight = (int) (Math.ceil(fm.descent - fm.top) + 2);//获得字体高度
mPageLineNum = (int) (mTextHeight / mFontHeight);// 获得行数

int count = this.mStrText.length();
for (int i = 0; i < count; i++) {
ch = this.mStrText.charAt(i);
float[] widths = new float[1];
String str = String.valueOf(ch);
mPaint.getTextWidths(str, widths);
if (ch == '\n') {
mRealLine++;// 真实的行数加一
mString.addElement(this.mStrText.substring(istart, i));
istart = i + 1;
w = 0;
} else {
w += (int) Math.ceil(widths[0]);
if (w > this.mTextWidth) {
mRealLine++;// 真实的行数加一
mString.addElement(this.mStrText.substring(istart, i));
istart = i;
i--;
w = 0;
} else {
if (i == count - 1) {
mRealLine++;// 真实的行数加一
mString.addElement(this.mStrText.substring(istart,
count));
}
}
}
}
}


public voiddrawText(Canvas canvas) {
for (int i = this.mCurrentLine, j = 0; i <this.mRealLine; i++, j++) {
if (j > this.mPageLineNum) {
break;
}
canvas.drawText((String) (mString.elementAt(i)),this.mTextPosx,
this.mTextPosy + this.mFontHeight * j, mPaint);
}
}


publicboolean keyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
if (this.mCurrentLine > 0) {
this.mCurrentLine--;
}
} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
if ((this.mCurrentLine + this.mPageLineNum) <(this.mRealLine - 1)) {
this.mCurrentLine++;
}
}
return false;
}
}

更多相关文章

  1. android圆盘菜单效果
  2. 高德地图帮助类
  3. android用贝塞尔曲线完成viewpager轮播指示器
  4. Android用itext生成含中文的PDF文档
  5. Chapter5-Android(安卓)Scroll 分析
  6. Android中内嵌字体实现个性化
  7. 【Android】Source Insight 基本用法 ( 导入 Android(安卓)源码
  8. Android如何一步步实现状态栏一体化效果
  9. Android(安卓)Studio系列教程(二)

随机推荐

  1. Activity的四种启动模式
  2. Android简单判断某个APK是否已经安装的方
  3. Android使用Presentation进行双屏开发
  4. Android的线程使用来更新UI----Thread、H
  5. Android开机执行指定shell脚本
  6. 使用Android Studio下载Android Support
  7. Android开发 System.out.println(); 控制
  8. 如何实现对Android设备进行文本的模拟输
  9. 【Android(安卓)电量优化】电量优化 ( 充
  10. 仿微信备注 editext下划线