位置: 编程技术 - 正文

Android-Canvas.drawText()详解

编辑:rootadmin

推荐整理分享Android-Canvas.drawText()详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Android的canvas上可以画很多基本形状,诸如:圆,矩形,线条等等,其中当属文字即drawText()较难理解和使用(额,这只是就个人感受),下面将慢慢介绍下如何简单使用drawText()。

FontMetrics

FontMetrics是Paint的一个内部类,主要定义了Paint绘图时的一些关键坐标位置,具体如下图(1)所示:

图(1):

其中:

ascent:该距离是从所绘字符的baseline之上至该字符所绘制的最高点。这个距离是系统推荐。descent:该距离是从所绘字符的baseline之下至该字符所绘制的最低点。这个距离是系统推荐的。top:该距离是从所绘字符的baseline之上至可绘制区域的最高点。bottom:该距离是从所绘字符的baseline之下至可绘制区域的最低点。leading:为文本的线之间添加额外的空间,这是官方文档直译,debug时发现一般都为0.0,该&#;也是系统推荐的。特别注意: ascent和top都是负&#;,而descent和bottom:都是正&#;。

drawText()参数

理解好一个函数所需参数的具体含义,是用好一个函数的关键。canvas.drawText(String text, float x, float y, Paint paint)中有四个参数,这四个参数都是表示其相对于所在View中的坐标,和屏幕坐标无关。其中text和paint较容易理解,下面重点介绍x和y的具体含义。

float x:根据官方API上的解释,该参数表示text被画的起始x坐标。其实text被画的起始位置还与Paint有关,Paint的TextAlign属性决定了text相对于起始坐标x的相对位置。例如,TextAlign的默认属性为Paint.Align.LEFT,这是text就是从起始坐标x的右侧开始画起。

图(2):

图(3):

Android-Canvas.drawText()详解

float y: 根据官方API上的解释,该参数表示text被画的起始y坐标。这个解释是比较抽象的,其实起始y坐标所代表是text的baseline在Y轴方向的位置。

drawText()居中显示

推导前提:Paint的TextAlign属性&#;为Paint.Align.LEFT,即为默认属性。

然后根据上面的参数介绍,drawText()的水平起始坐标x很容易确定。

float x = getWidht() >> 1 - paint.measureText(String text) >> 1

注意: <<:左移运算符,num << 1,相当于num乘以2 、 >>:右移运算符,num >> 1,相当于num除以2

比较棘手的是drawText()的垂直起始坐标y,即baseline到底怎么确定。其实我们可以由上图(1)中各基准线间的相对位置关系推算出来。

假设我们所求的baseline的&#;为baseY;

text的bottom距离:①bottomY = baseY &#; fontMetrics.bottom;text的字体高度:②fontHeight = fontMetrics.descent- fontMetrics.ascent因为我们要让text垂直居中,所以此时text的bottom距离应该为:

注意:height可以称作控件高度③bottomY=1/2 * height &#; 1/2 * fontHeight

所以由上述①②③公式就可以推得:④baseY = 1/2 * height &#; 1/2 * (fontMetrics.descent- fontMetrics.ascent) - fontmetrics.bottom此时求得baseline的&#;,即cavans.drawText()里的y的坐标。

推论:任意位置其实由上述公式④可知,在paint的size属性不变情况下,只有height是变量,所以控制好height的&#;就可以把drawText()画在View的任意的位置

作者:XycZero查看原文:飞机票

Android实现数据存储技术 Android实现数据存储技术本文介绍Android中的5种数据存储方式。数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,

androidのNDK生成so文件 我们在安装环境的时候安装了NDK,可以在eclipse下直接生成so文件。NDK的压缩包里面自带了一些sample工程,NDK的文件直接解压到某个目录下即可。第一次

Android深入浅出系列之实例应用—如何在一个Activity里调用另外一个Activity? 在手机页面之间的跳转一文中我介绍了如何运用setContentView()方法切换布局文件Layout的方式进行手机页面间的跳转,这种适合更改背景,文字颜色,文字

标签: Android-Canvas.drawText()详解

本文链接地址:https://www.jiuchutong.com/biancheng/382281.html 转载请保留说明!

上一篇:[置顶] Android Studio -添加你见过的最牛Log*神器*([置顶]游戏名 TentacleLocker)

下一篇:Android实现数据存储技术(android的数据储存方式)

  • 税务账是什么意思
  • 政府补贴在企业怎么申请
  • 建筑业异地施工如何纳税
  • 货币形式投资的特点是
  • 房地产企业利息资本化条件有哪些
  • 善意取得虚开专票的条件包括
  • 固定资产没收到发票收到实物入账有什么风险
  • 年终奖有计算公式吗
  • 减免的增值税如何账务处理
  • 弃置费用预计负债减少超过固定资产账面价值
  • 住宿费可以开会议费吗
  • 餐饮招待怎么入账
  • 营改增之后有了利息收入核算税费?
  • 5%征收率的适用范围
  • 个税怎么计算扣多少
  • 双薪制工资如何缴纳个人所得税?
  • 小规模纳税人实行简易征收办法
  • 2018年终奖个人所得税计算器公式
  • 企业注销增值税进项核销账务处理流程
  • 物业公司安装监控为了什么
  • 信息技术包括哪几个方面
  • 1697508432
  • 物业费需要摊销吗?
  • 华为nova9se参数详细参数
  • mac安装软件提示身份不明
  • linux如何查找命令
  • 月末汇兑损益怎么算
  • 惠普2600打印机故障排除
  • PHP:pg_fetch_row()的用法_PostgreSQL函数
  • 未结算未取得发票怎么办
  • 单位人工成本计算公式
  • php中哪个命令用来删除当前目录
  • 公司已经注销了还能劳动仲裁吗
  • 小企业会计准则和一般企业会计准则的区别
  • php对象是什么类型的数据
  • javaweb购物
  • 手把手教你安装技嘉b550 master主板
  • nvm for windows
  • react组件调用方法
  • php微信公众号获取带参二维码
  • 年底计提成本
  • 材料合理损耗会计处理
  • 外地预交的企业所得税如何在季度企业所得税申报
  • 专利技术的增值税
  • qt无边框窗口设计
  • 出差费算什么科目
  • 积分兑换业务有风险吗
  • 工业企业会计核算中常见的会计核算程序有哪些?
  • 用友t3制单日期定住不变
  • 旅游大巴应怎么买票
  • 医院执行政府会计制度操作指南 .pdf
  • 职工体检费用标准规定
  • 报销发票哪些可以抵税
  • 资产处置收益项目有哪些
  • 劳务派遣公司工资发放方式
  • 自创商誉是否需要纳税
  • windows2008r2修改密码
  • 如何用u盘装系统盘
  • bp程序是什么意思
  • win8系统怎么设置
  • ntfs权限设置步骤
  • win7电脑桌面图标不见了右键也没用
  • cocos安装
  • 遮罩层出现后怎么点击其他地方隐藏
  • cocos2dx 3.3 helloworld 入门 学习与详解
  • opengl使用教程
  • 下面有关js中call和apply的描述,错误的是
  • ReactNative之FlatList的具体使用方法
  • 用jquery制作轮播图效果
  • python的入门教程
  • 详细解读退役军人优待政策
  • 隐藏应用名字
  • 【mclin】手把手叫你在Eclipse里添加Android开发功能(附:完整离线版Android_SDK和Android_ADT下载)
  • 轻松实现js图片识别
  • js如何判断是否有定时器功能并清除
  • 土地税源编码怎么填
  • 超豪华小汽车需要交什么税
  • 出租房地面铺什么
  • 关于税制的问题
  • 泉港国税电子税务局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设