欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Android DrawText 字符串的绘制,androiddrawtext

来源: 开发者 投稿于  被查看 33949 次 评论:159

Android DrawText 字符串的绘制,androiddrawtext


<无详细内容>

1.TextUtil.java

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;
	}
}

2.MyView.java

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);
	}
}

3.Test_DrawText.java

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);
	}
    
}

用户评论