- 浏览: 5825419 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 3809我把SlidingDrawer源码提了出来,希望对1.5的朋友 ... -
简单拖动效果(带Cache,需要完善)
2011-10-13 15:10 4231如何去实现一个具有幻象的拖拽效果? 所谓”幻象“就是当你按下去 ... -
Android Activity中启动另一应用程序的方法,无需得到类名
2011-08-02 14:46 17268在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和 ... -
java-universal-tween-engine,一个动画系统库
2011-06-29 09:21 6745http://code.google.com/p/java-u ... -
网上发现的一个android UI包
2011-05-24 12:21 4117里面有些UI和效果 -
android中使用代码启动其他程序
2011-04-29 23:15 5304你要訪問其他的程序,那麼這個程序要先裝載到模擬器或真機上面,因 ... -
listView背景问题以及限制editText字数以及如果想通知别人已经不能在写
2011-04-29 22:44 32111.在listView设置好背景之后 你如果点击空白出 你会发 ... -
Android键盘和触摸事件处理
2011-04-29 22:32 7006activity和VIEW都能接收触摸和按键,如果响应事件只需 ... -
Android View 拖动&插入
2011-04-29 22:20 3550View 拖动&插入 即: 支持 拖动图标 然后 ... -
使TextView文本可以水平和垂直滚动
2011-04-29 21:59 14432在做一个小的电子书程序,要求电子书具有放大缩小的功能,所以肯定 ... -
ArrayAdapter源码
2011-04-29 12:29 6304看看人家怎么写的。 /* * Copyright (C ... -
Android下获取开机时间
2011-04-02 21:51 6232找了一圈没发现能得到开机启动时间资料,于是乎突发奇想,得到了解 ... -
AutoCompleteTextView连接到数据库
2011-03-30 20:49 4732AutoCompleteTextView可以根据输入 ... -
改变屏幕Brightness(亮度)
2011-03-30 12:48 4606http://www.eoeandroid.com/forum ... -
android 拖拽图片&拖动浮动按钮到处跑
2011-02-24 20:55 31776来自老外: import android.app.Acti ... -
拖动一个控件在另一个控件(layout)上,并固定位置在几个位置显示
2011-02-24 20:51 5896实现效果: 鼠标拖动btn SSS,SSS在水平的layo ... -
Handler与Message类,实现n秒后无操作自动消失功能
2011-02-24 20:45 4644实现功能:某控件不操作10秒后,自动消失。如照相机变焦条出现后 ... -
带删除按钮的ListView
2011-02-24 10:33 6151不用说了,上图先: import java.util.A ... -
android3.0之Action Bar基础
2011-02-22 17:12 6832http://www.android123.com.cn/an ...
相关推荐
本文实例讲述了Android编程之绘制文本(FontMetrics)实现方法。分享给大家供大家参考,具体如下: Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。 它的思路和java.awt.FontMetrics的基本相同。 ...
4. **绘制文本**: 在自定义View的`onDraw()`方法中,使用`Canvas.drawText()`函数绘制文本,同时应用之前计算的位置信息。 5. **验证效果**: 运行应用程序并查看文本的显示效果,确保文本在View中的布局正确无误。 6...
`FontMetrics Viewer`是一个实用工具,它可以帮助开发者深入了解Android字体的尺寸和特性,以便更好地控制文本的显示效果。本项目主要涉及以下几个Android代码相关的知识点: 1. **自定义View**: `FontMetrics ...
3. **绘制文本**:在`onDraw()`方法中,使用`canvas.drawText()`方法来绘制文本。传入计算好的坐标和要显示的文本,即可实现居中效果。 ```java @Override protected void onDraw(Canvas canvas) { super.onDraw...
在Android开发中,当涉及到在Canvas上绘制文本时,精确地定位文本的位置是至关重要的。`FontMetrics`对象就是这样一个工具,它提供了有关字体在特定大小下各部分位置的信息,帮助开发者准确计算文本的坐标。本文将...
在Android开发中,有时我们需要对字体的宽高进行精确的控制,例如在自定义View或者绘制文本时。本文将详细讲解如何在Android中获取字体的宽度和高度。 首先,我们来理解一下Android中的字体概念。在Android系统中,...
在Android开发中,当涉及到文字绘制时,了解`FontMetrics`是非常重要的。`FontMetrics`对象提供了关于字体在屏幕上如何布局的关键信息。本文将详细解析`FontMetrics`的几个核心属性,帮助开发者更好地理解和运用它们...
首先,我们要了解Android中用于绘制文本的基本组件:Canvas、Paint以及它们如何相互作用。Canvas提供了在屏幕上绘制图形和文本的接口,而Paint则是定义这些元素样式的关键,包括字体大小、颜色、样式等。 1. **测量...
在Android开发中,当涉及到自定义视图或者图形绘制时,文字的精准定位变得尤为重要。本文主要探讨的是Android中的文字基线(Baseline)算法及其在实际应用中的使用方法。 首先,Baseline是绘制文字时的一个关键概念...
`drawText()`方法是Canvas的一个关键函数,用于在指定位置绘制文本。本篇文章将深入探讨如何利用`drawText()`实现文字居中效果。 首先,`drawText(String text, float x, float y, Paint paint)`方法的参数含义如下...
自定义View的核心是重写`onDraw()`方法,其中使用`Canvas`对象的`drawText()`方法绘制文本。同时,借助Handler来定时刷新界面,改变文字绘制的X轴位置,从而模拟出滚动效果。 以下是实现跑马灯效果的关键步骤: 1....
本文将详细介绍如何在Android中自定义一个漂亮的圆形进度条,这个自定义组件名为TasksCompletedView。通过以下步骤,我们可以创建一个带有圆心进度显示的圆形进度条。 首先,我们需要创建一个新的Java类...
在Android应用开发中,字符滚动控件(Ticker)通常用于显示滚动消息或标题,它能够以动态的效果展示一串文字,比如电视底部的新闻滚动条。Ticker控件可以帮助开发者创建吸引用户注意力的交互式界面。本文将深入探讨...
在绘制文字时,需要了解 FontMetrics 类,这个类是 Paint的一个内部类,主要定义了绘制文本时的一些关键坐标位置。FontMetrics 类有五个成员变量:top、ascent、baseline、descent、bottom 和 leading。这些变量的值...
在Android开发中,Canvas是用于在屏幕上绘制图形和文本的核心...理解`FontMetrics`类的属性和`drawText()`的用法,是自定义View时绘制文本的关键。通过实践和实验,开发者可以熟练掌握这些技巧,创造出丰富的用户界面。
// 调整并绘制文本 private void drawScaledText(Canvas canvas, int lineStart, String line, float lineWidth) { // 实现文字的两端对齐算法,这里需要计算每个空格的宽度,然后按比例分配 // ... } } ``` ...
本文将详细介绍如何在Android平台上实现这个功能,通过一个示例代码来阐述整个过程。 首先,我们要理解这个算法的核心思想。其主要分为三个步骤: 1. **创建空白图片**:根据原始图片的大小和设定的文字字体大小,...