欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Android的繪制文本對象FontMetrics的介紹及繪制

系統 1914 0
一。Android繪制文本對象FontMetrics介紹

?? FontMetrics對象
?? 它以四個基本坐標為基準,分別為:

?? ?FontMetrics.top
?? ?FontMetrics.ascent
?? ?FontMetrics.descent
?? ?FontMetrics.bottom
??



?? 實例JAVA代碼如下:
?? Paint textPaint = new Paint( Paint.ANTI_ALIAS_FLAG);
?? textPaint.setTextSize( 35);
?? textPaint.setColor( Color.WHITE);

?? // FontMetrics對象
?? FontMetrics fontMetrics = textPaint.getFontMetrics();
?? String text = "abcdefghijklmnopqrstu";

?? // 計算每一個坐標
?? float baseX = 0;
?? float baseY = 100;
?? float topY = baseY + fontMetrics.top;
?? float ascentY = baseY + fontMetrics.ascent;
?? float descentY = baseY + fontMetrics.descent;
?? float bottomY = baseY + fontMetrics.bottom;

?? // 繪制文本
?? canvas.drawText( text, baseX, baseY, textPaint);

?? // BaseLine描畫
?? Paint baseLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
?? baseLinePaint.setColor( Color.RED);
?? canvas.drawLine(0, baseY, getWidth(), baseY, baseLinePaint);

?? // Base描畫
?? canvas.drawCircle( baseX, baseY, 5, baseLinePaint);

?? // TopLine描畫
?? Paint topLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
?? topLinePaint.setColor( Color.LTGRAY);
?? canvas.drawLine(0, topY, getWidth(), topY, topLinePaint);

?? // AscentLine描畫
?? Paint ascentLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
?? ascentLinePaint.setColor( Color.GREEN);
?? canvas.drawLine(0, ascentY, getWidth(), ascentY, ascentLinePaint);

?? // DescentLine描畫
?? Paint descentLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
?? descentLinePaint.setColor( Color.YELLOW);
?? canvas.drawLine(0, descentY, getWidth(), descentY, descentLinePaint);

?? // ButtomLine描畫
?? Paint bottomLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
?? bottomLinePaint.setColor( Color.MAGENTA);
?? canvas.drawLine(0, bottomY, getWidth(), bottomY, bottomLinePaint);

二。繪製文本。

1.TextUtil 類



    package com.wistron.test.DrawText;

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 類

    package com.wistron.test.DrawText;

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 final Paint mPaint;
 private int mICount = 0;
 private final 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, Color.LTGRAY,
    0xff00ff, 255, 16);
  mTextUtil.InitText();
  new Thread(this).start();
 }

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  canvas.drawColor(Color.LTGRAY);
  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();
  }
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {

  return mTextUtil.KeyDown(keyCode, event);
 }

}

  



3. DrawText? Activity.

    package com.wistron.test.DrawText;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;

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

}
  

Android的繪制文本對象FontMetrics的介紹及繪制文本


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 午夜色a大片在线观看免费 龙珠z在线观看 | 天天插天天射天天操 | 欧美成人精品一区二区三区 | 国产精品成人在线播放 | 日韩第一 | 日韩亚洲人成网站在线播放 | 草草视频手机在线观看视频 | 色婷婷综合在线 | 可米影院 | 视频成人永久免费视频 | 欧美a视频 | 妇女毛片| 国产高清成人 | 好看的中文字幕在线 | 99精品在线观看 | 97碰碰在线视视频 | 国产精品久久久久久久久免费 | 久草视频大全 | 久草网站在线 | 91久久青青草原免费 | 亚洲一区中文字幕在线观看 | 毛片基地看看成人免费 | 亚洲日韩在线视频 | 欧美成人手机视频 | 激情伊人网 | 亚洲午夜精品一级在线 | 好男人www. | 97国产精品视频人人做人人爱 | 99在线免费观看 | 最新中文字幕 | 影音先锋资源av | 久久久久成人免费 | 日日干夜夜干 | 国产成人91激情在线播放 | 日韩精品亚洲一级在线观看 | 欧美日韩一区二区在线视频 | 久久久久国产精品 | 国产一区二区三区不卡在线观看 | 久久亚洲国产精品 | a视频在线播放 | 国产精品久久国产精品 |