自定义控件详解(七):drawText()
比较基础的一个方法。即绘制文本
使用如下:
Paint paint = new Paint(); paint.setColor(Color.RED); // 红色字体 paint.setStyle(Paint.Style.FILL); // 类型 paint.setStrokeWidth(1); // 画笔线条宽度 paint.setTextSize(60); // 绘制文本大小 // 绘制内容 canvas.drawText("听着music睡 ' blogs" , 100 , 200 , paint);
效果;
可以看下方法:
这篇只讨论第三个方法。
可以看到 4个参数,第二个、第三个参数 是float类型,实际上就是 绘制的文本的绘制参考坐标。注意这个坐标 不是文本的左上角的那个点,float y 代表 基线的Y位置。
验证一下:
绘制一条蓝色的基线,绘制一个文本。
Paint paint = new Paint();paint.setColor(Color.RED);paint.setStyle(Paint.Style.FILL);paint.setStrokeWidth(1);paint.setTextSize(60);int baseLine = 100 ;// 基线的Y坐标canvas.drawText("abcdefghi",30 , baseLine , paint); // 绘制 (30,baseLine) 为参考点的文本 paint.setColor(Color.BLUE);canvas.drawLine(30,baseLine ,300,baseLine,paint); // 绘制基线
可以看到,绘制文本的参数(floatx , floaty) 指的是基线的左起点坐标而不是左上角。
扩展:
drawtext除了基线还有另外4条线,称为4格线。
分别是ascent,descent,top,bottom
- ascent: 系统建议的,绘制单个字符时,字符应当的最高高度所在线
- descent:系统建议的,绘制单个字符时,字符应当的最低高度所在线
- top: 可绘制的最高高度所在线
- bottom: 可绘制的最低高度所在线
怎么获取这4个线的y轴坐标呢,有一个类 FontMetrics
这些属性的值即 与基线的相对y轴距离(可能为负值)
示例:
int baseLineY = 100 ;Paint.FontMetrics fm = paint.getFontMetrics();float ascent = baseLineY + fm.ascent ; // 制顶线float descent = baseLineY+fm.descent ; //制低线float top = baseLineY + fm.top ; // 最顶线float bottom = baseLineY + fm.bottom ; // 最低限// 基线 paint.setColor(Color.RED);canvas.drawLine(baseLineX , baseLineY , 1000 , baseLineY , paint);// 制顶线 paint.setColor(Color.BLUE);canvas.drawLine(baseLineX,ascent , 1000 , ascent , paint);// 制底线 paint.setColor(Color.GREEN);canvas.drawLine(baseLineX,descent , 1000 , descent , paint);// 最顶线 paint.setColor(Color.YELLOW);canvas.drawLine(baseLineX,top,1000,top , paint);// 最底线 paint.setColor(Color.MAGENTA);canvas.drawLine(baseLineX , bottom , 1000 , bottom ,paint);//写文字 paint.setColor(Color.BLACK);canvas.drawText("听着music睡 ' blogs" ,baseLineX,baseLineY , paint);
可以看到:
黄色的最顶线top
蓝色的制顶线ascent
红色的基线baseline
绿色的制低线descent
粉色的最低限bottom
自定义控件详解(七):drawText()相关推荐
- SSH服务详解(七)– SSH 连接 Github
SSH 连接 Github SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动 SSH服务详解(二)–使用私钥登录 SSH 服务器(免密登录) SSH 服务详解 (三)-- 使用 S ...
- PackageManagerService启动详解(七)之扫描系统应用安装目录阶段流程分析
PKMS启动详解(七)之BOOT_PROGRESS_PMS_SYSTEM_SCAN_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系 ...
- Linux字符设备驱动详解七(“插件“设备树实现RGB灯驱动)
文章目录 系列文章目录 前言 正文 Device Tree Overlays:"插件"设备树 传统设备树 "插件"设备树 使用前提 案例说明 设备树:foo.d ...
- Android 动态分区详解(七) overlayfs 与 adb remount 操作
0. 导读 最开始学习 Android 动态分区源码的时候,比较代码发现 system/core/fs_mgr 目录下多了一个名为 fs_mgr_overlayfs.cpp 的文件,一直不知道什么时候 ...
- OpenLayers官方示例详解七之图层的最小、最大分辨率(Layer Min/Max Resolution)
目录 一.示例简介 二.代码详解 一.示例简介 这个示例加载了一个MapBox的瓦片图层和一个Open Street Map的瓦片图层,同时使用最小.最大分辨率限制图层加载的比例级别. 使用鼠标放大两 ...
- 自定义控件详解(六):Paint 画笔MaskFilter过滤
首先看一个API:setMaskFilter(MaskFilter maskfilter): 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等. 以下有两个Ma ...
- Android空间架构与自定义控件详解-更新中
概述: 控件是每个Adnroid APP都必不可少的一部分,无论是使用系统控件还是使用自定义控件.这些控件组成了精美的界面. 本章将讲解Android控件架构,以及如何实现自定义控件. 本章你讲了解到 ...
- Java单例模式详解--七种单例模式实现+单例安全+实际应用场景
单例模式 保证了一个类只有一个实例,并且提供了一个全局访问点.单例模式的主要作用是节省公共资源,方便控制,避免多个实例造成的问题. 实现单例模式的三点: 私有构造函数 私有静态变量维护对象实例 公有静 ...
- 青牛融合cdn_详解七牛云存储以及融合CDN加速
对于网站上的资源,比如图片,音视频,以及CSS.JS等静态文件可以使用融合CDN加速,提高页面访问速度与资源加载速度. 同样是对网站做加速,但根据需求一般分为两种情况: 情景一:同时使用七牛云的加速服 ...
- HashMap 详解七
使用 Iterator 遍历 通过 HashMap.entrySet().iterator() 方法获取迭代器, 使用 next 方法对 HashMap 进行遍历. HashMap<String ...
最新文章
- deepin更新失败_检查更新失败
- iphone分辨率_iPhone 的屏幕为什么比安卓更丝滑?
- hdu3986 spfa + 枚举最短路上的边
- python怎么画两幅图_python matplotlib模块: Subplots(在同一个figure里绘制多个图)
- 《精通Unreal游戏引擎》一第4步 使用BSP创建地图
- 争议“云游戏”:一个几十亿规模的颠覆者?一场徐虎飘渺的幻梦
- 性能测试监控关键指标
- Hadoop(五)HBase基础
- 公司组织框架以及人员信息同步到钉钉相关解决方案
- matlab 常用机器学习算法的实现
- NLP学习—12.Seq2Seq模型与Attention机制
- OpenCV3.4.1+VS2018 安装并配置详细教程
- SAM-BA 2.14 reconfiguration----DIY你的sam-ba
- 苹果公司市值$5000亿已经超越波兰、台湾等国民生产总值GDP
- 零基础学习微信小程序(7):组件
- rabbitmq 与 erlang 安装与测试
- .NET 反编译工具
- 查看exe和dll等二进制文件时间戳(生成时间)的工具与方法介绍
- 匈牙利命名法(指导)
- 茂林位置服务器,合肥北斗gps卫星定位系统-量身定制「茂林GPS运营中心」
热门文章
- 在Struts2中实现登陆后跳转到登录前页面
- 1日元是多少人民币(2014年04月23日)
- wow和scrollreveal动画
- 走遍中国《中国古镇全集》
- vue自学入门-2(vue创建项目)
- clickhouse安装使用文档
- opensuse 安装 Anaconda3 之后出现Could not start d-bus. Can you call qdbus?
- Linux下安装与使用本地的perl模块
- Object.prototype.toString方法
- CSS中背景图片的坐标之使用说明及css中把所有背景图都放在一张图片上减少图片服务器的请求次数问题(转)...