android 画文字 自动换行

    技术2025-10-01  44

    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 {     private float  mTextPosx = 0;// x坐标     private float  mTextPosy = 0;// y坐标     private float mTextWidth = 0;// 绘制宽度     private float 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, float  x, float  y, float w, float 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);         mPaint.setAntiAlias(true);                  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 = (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));                     }                 }             }         }     }     /**      * 绘制字符串      *      * @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;     } }

    最新回复(0)