Android Canvas绘制文字 自动换行

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

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

     
      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;
      }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值