您的位置:首页 > 移动开发 > Android开发

Android DrawText字符串的绘制

2010-06-11 23:21 78 查看

package com.Aina.Android;

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 {

private int mTextPosx = 0;// x坐标
private int mTextPosy = 0;// y坐标
private int mTextWidth = 0;// 绘制宽度
private int mTextHeight = 0;// 绘制高度
private int mFontHeight = 0;// 绘制字体高度
private int mPageLineNum = 0;// 每一页显示的行数
private int mCanvasBGColor = 0;// 背景颜色
private int mFontColor = 0;// 字体颜色
private int mAlpha = 0;// Alpha值
private int mRealLine = 0;// 字符串真实的行数
private int mCurrentLine = 0;// 当前行
private int mTextSize = 0;// 字体大小
private String mStrText = "";
private Vector mString = null;
private Paint mPaint = null;

public TextUtil(String StrText, int x, int y, int w, int h, int bgcolor,
int textcolor, int alpha, int textsize) {
mPaint = new Paint();
mString = new Vector();
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;
}

public void 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);
this.GetTextIfon();
}

/**
* 得到字符串信息包括行数,页数等信息
*/
public void GetTextIfon() {
char ch;
int w = 0;
int istart = 0;
FontMetrics fm = mPaint.getFontMetrics();// 得到系统默认字体属性
mFontHeight = (int) (Math.ceil(fm.descent - fm.top) + 2);// 获得字体高度
mPageLineNum = 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));
}
}
}
}
}

/**
* 绘制字符串
*
* @param canvas
*/
public void DrawText(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);
}
}
/**
* 翻页等按键处理
* @param keyCode
* @param event
* @return
*/
public boolean 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;
}
}




package com.Aina.Android;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.View;

public class MyView extends View implements Runnable{

private Paint mPaint;
private int mICount = 0;
private TextUtil mTextUtil;

public MyView(Context context) {
super(context);
mPaint = new Paint();
String string = "测试自动换行(第1行)\n\n测试自动换行(第2行)\n测试自动换行(第3行)\n测试自动换行(第4行)\n测试自动换行(第5行)\n测试自动换行(第6行)\n测试自动换行(第7行)";
mTextUtil = new TextUtil(string, 15, 150, 300, 80, 0x000000, 0xff00ff,
255, 16);
mTextUtil.InitText();
new Thread(this).start();
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);
mPaint.setAntiAlias(true);
if (mICount < 100) {
mICount++;
}
mPaint.setColor(Color.RED);
canvas.drawText("装在进度:" + mICount + "%......", 10, 20, mPaint);
mTextUtil.DrawText(canvas);
}

@Override
public void run() {
Thread.currentThread();
while(!Thread.interrupted()){
try{
Thread.sleep(10);
}catch(Exception ex){
ex.printStackTrace();
Thread.currentThread().interrupt();
}
this.postInvalidate();
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {

return mTextUtil.KeyDown(keyCode, event);
}
}




package com.Aina.Android;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;

public class Test_DrawText extends Activity {
/** Called when the activity is first created. */
private MyView mv ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mv = new MyView(this);
setContentView(mv);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
mv.onKeyDown(keyCode, event);
return super.onKeyDown(keyCode, event);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: