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();}@Overrideprotected 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);}@Overridepublic 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);    }@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {mv.onKeyDown(keyCode, event);return super.onKeyDown(keyCode, event);}    }

更多相关文章

  1. Android(安卓)三角标签(自定义Textview控件)
  2. android酷炫翻页效果+图形分析
  3. android 时间戳与日期格式的互相转换 以及 自定义选择器
  4. android自动化测试[一]
  5. android 图形开发实例
  6. Android中对图像进行Base64编码
  7. Android(安卓)性能测试优质实践汇总
  8. Android实现图表绘制和展示
  9. Android之——自己定义TextView

随机推荐

  1. 51CTO博主交流群喊你回家啦~
  2. 常用的虚拟机软件有哪些?linux基础及应用
  3. PHP基础: 命名空间的引入方式和自动加载
  4. 类名的引入及自动加载类和常用mysql语句
  5. 类的重载与命名空间
  6. flex元素常用属性
  7. CISSP学习:第9章安全漏洞、威胁和对策
  8. Linux路线
  9. 【死磕JVM】JVM快速入门之前戏篇
  10. Sql Server之旅——第十二站 对锁的初步