- 浏览: 5777045 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
一。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 類
2. MyView 類
3. DrawText Activity.
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); } }
发表评论
-
http://www.android-studio.org/
2018-08-06 09:25 0http://www.android-studio.org/ ... -
SlidingDrawer源码
2012-03-14 10:13 3773我把SlidingDrawer源码提了出来,希望对1.5的朋友 ... -
简单拖动效果(带Cache,需要完善)
2011-10-13 15:10 4182如何去实现一个具有幻象的拖拽效果? 所谓”幻象“就是当你按下去 ... -
Android Activity中启动另一应用程序的方法,无需得到类名
2011-08-02 14:46 17198在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和 ... -
java-universal-tween-engine,一个动画系统库
2011-06-29 09:21 6699http://code.google.com/p/java-u ... -
网上发现的一个android UI包
2011-05-24 12:21 4049里面有些UI和效果 -
android中使用代码启动其他程序
2011-04-29 23:15 5222你要訪問其他的程序,那麼這個程序要先裝載到模擬器或真機上面,因 ... -
listView背景问题以及限制editText字数以及如果想通知别人已经不能在写
2011-04-29 22:44 31611.在listView设置好背景之后 你如果点击空白出 你会发 ... -
Android键盘和触摸事件处理
2011-04-29 22:32 6964activity和VIEW都能接收触摸和按键,如果响应事件只需 ... -
Android View 拖动&插入
2011-04-29 22:20 3506View 拖动&插入 即: 支持 拖动图标 然后 ... -
使TextView文本可以水平和垂直滚动
2011-04-29 21:59 14334在做一个小的电子书程序,要求电子书具有放大缩小的功能,所以肯定 ... -
ArrayAdapter源码
2011-04-29 12:29 6263看看人家怎么写的。 /* * Copyright (C ... -
Android下获取开机时间
2011-04-02 21:51 6185找了一圈没发现能得到开机启动时间资料,于是乎突发奇想,得到了解 ... -
AutoCompleteTextView连接到数据库
2011-03-30 20:49 4654AutoCompleteTextView可以根据输入 ... -
改变屏幕Brightness(亮度)
2011-03-30 12:48 4564http://www.eoeandroid.com/forum ... -
android 拖拽图片&拖动浮动按钮到处跑
2011-02-24 20:55 31705来自老外: import android.app.Acti ... -
拖动一个控件在另一个控件(layout)上,并固定位置在几个位置显示
2011-02-24 20:51 5849实现效果: 鼠标拖动btn SSS,SSS在水平的layo ... -
Handler与Message类,实现n秒后无操作自动消失功能
2011-02-24 20:45 4594实现功能:某控件不操作10秒后,自动消失。如照相机变焦条出现后 ... -
带删除按钮的ListView
2011-02-24 10:33 6113不用说了,上图先: import java.util.A ... -
android3.0之Action Bar基础
2011-02-22 17:12 6793http://www.android123.com.cn/an ...
相关推荐
主要介绍了Android编程之绘制文本(FontMetrics)实现方法,结合实例形式较为详细的分析了Android使用FontMetrics对象绘制文本的相关技巧,需要的朋友可以参考下
Android代码-FontMetrics Viewer
一个用于测量和测试fontmetrics的android应用程序
Android 自定义view要用到的文字度量类FontMetrics测试
主要为大家详细介绍了Android使用FontMetrics对象计算位置坐标,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
笔者最近在做一款弹幕控件,里面涉及到绘制文本,以及文本边框。而绘制文本边框需要知道文本的左边位置,上边位置,以及文本的宽高。 通常来说,使用 Canvas 绘制文本,可以通过画笔 Paint 来设置文字的大小。但是...
下面小编就为大家带来一篇Android中FontMetrics的几个属性全面讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
一款用于测量和测试 FontMetrics 的 Android 应用 更多详情、使用方法,请下载后阅读README.md文件
字体属性及测量(FontMetrics).doc
//显示字体的FontMetrics对象 public void init(){ //初始化 Graphics graphics = getGraphics(); //得到graphics对象 Dimension dim=getSize(); //得到尺寸 fontHeight=dim.height-10; //根据Applet...
这几天对Android中实现画圆弧及圆弧效果中所实现的效果进行了修改,改为进度圆心进度条,效果如图所示 TasksCompletedView.java 代码如下 import android.content.Context; import android.content.res....
//显示字体的FontMetrics对象 Color randomColors[]; //随机生成颜色 boolean randomColor; //是否是随机颜色 public void init(){ //初始化 raphics graphics = getGraphics(); //得到graphics对象 ...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...
Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...