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自动化测试[一]
  2. 【安卓】关于 Android 默认字体以及对比微软雅黑字体
  3. Android 性能测试优质实践汇总
  4. 在Android Studio上测试运行,Unity发布成Android包过程中所遇到的
  5. Android robotium自动化测试
  6. Robotium 一款Android自动化测试框架
  7. android 开源测试框架学习
  8. 测试横竖屏切换时activity 的生命周期
  9. 非常详细的测试unity与android之间的通讯操作

随机推荐

  1. Android 球碰撞反弹 (2)
  2. Android中的RecyclerView学习网址
  3. android 6.0权限问题处理的核心代码--sho
  4. 在android 只取vold相关的log信息
  5. Android Question - “Id cannot be reso
  6. android 获取系统和SD卡音乐
  7. android.os.NetworkOnMainThreadExceptio
  8. android webview 中处理网页中的400、404
  9. Android Fresco的使用
  10. Android图片解决方案