当前位置: 首页 > news >正文

Android 绘制之文字测量

drawText() 绘制文字

绘制进度条:paint.strokeCap = Paint.CAP.RONUD 线条两边样式 

设置文字字体:paint.typeFace = Resources.Compat.getFont(context,font)

设置加粗  paint.isFakeBoldText

设置居中: paint.setTextAlign = Paint.Align.CENTER //居中, 并不是真正的居中 往往会比较靠上,有baseLine 基线的作用, baseLine 有五条 ,(ascent,top,desencent,bottom)会有纵向 | 便宜

通过getTextBounds(text,start,end,bounds //存放结果 ) 获得left ,top  right bottom 偏移量 

静态文字设置示例:

paint.getTextBounds("AAAA",0,"AAAA".length,bounds)
canvas.drawText("AAAA",width / 2f,height / 2f - ((bounds.top + bounds.bottom) / 2),paint)

计算偏移量 设置居中,

动态设置:

paint.getFontMetrics(fontMetrices)
canvas.drawText("abcpst",width / 2f,height / 2f - ((fontMetrices.ascent + fontMetrices.descent) / 2),paint)

文字靠左显示:

paint.textAlign = Paint.Align.LEFT
canvas.drawText("ababab",0f, - fontMetrices.top,paint)

靠左上角

paint.textAlign = Paint.Align.LEFT
paint.getTextBounds("ababab",0,"ababab".length,bounds)
canvas.drawText("ababab",0f, - bounds.top.toFloat(),paint) //静态

文字左右各占空间 字体越大 占用空越大 示例:

        paint.textSize = 150.dppaint.textAlign = Paint.Align.LEFTpaint.getTextBounds("ababab",0,"ababab".length,bounds)canvas.drawText("ababab",0f, - bounds.top.toFloat(),paint) paint.textSize = 15.dppaint.getTextBounds("ababab",0,"ababab".length,bounds)canvas.drawText("ababab",0f, - bounds.top.toFloat(),paint) 

字体越大 文字间间距越大,因为有baseLine的左右以及textBound设置

解决:

        paint.textSize = 150.dppaint.textAlign = Paint.Align.LEFTpaint.getTextBounds("ababab",0,"ababab".length,bounds)canvas.drawText("ababab",- bounds.left.toFloat(), - bounds.top.toFloat(),paint) paint.textSize = 15.dppaint.getTextBounds("ababab",0,"ababab".length,bounds)canvas.drawText("ababab",-bounds.left.toFloat(), - bounds.top.toFloat(),paint) 

其实仔细看还是有一点点间距,这是文字的字体所占用的缝隙

StaticLayout 使用
StaticLayout(text,textPaint,width ,align,span 间距,行距)

val staticLayout = StaticLayout.Builder.obtain(text, 0, text.length, textPaint, width)
textPaint.textSize = 16.dp
staticLayout.build().draw(canvas)

 

paint.fontSpacing 行间距

单个图文混合排序示例

canvas.drawBitmap(bitmap, width - IMAGE_SIZE, IMAGEPADDING, paint)paint.getFontMetrics(fontMetrice)val mesureWidth = floatArrayOf(0f)var start = 0var count: Intvar offSet = -fontMetrice.topvar maxWidth: Floatwhile (start < text.length) {if (offSet + fontMetrice.bottom < IMAGEPADDING || offSet + fontMetrice.top > IMAGE_SIZE + IMAGEPADDING) {maxWidth = width.toFloat()} else {maxWidth = width.toFloat() - IMAGE_SIZE}count = paint.breakText(text,start,text.length,true,maxWidth,mesureWidth)canvas.drawText(text, start, start + count, 0f, offSet, paint)start += countoffSet += paint.fontSpacing}

 

相关文章:

Android 绘制之文字测量

drawText() 绘制文字 绘制进度条:paint.strokeCap Paint.CAP.RONUD 线条两边样式 设置文字字体:paint.typeFace Resources.Compat.getFont(context,font) 设置加粗 paint.isFakeBoldText 设置居中: paint.setTextAlign Paint.Align.CENTER //居中, 并不是真正的居中 往…...

基于AVR128单片机智能传送装置

一、系统方案 1、板载可变电阻&#xff08;电位器&#xff09;R29的电压作为处理器ATmega128的模数转换模块中单端ADC0的模拟信号输入&#xff08;跳线JP13短接&#xff09;。 2、调节电位器&#xff0c;将改变AD转换接口ADC0的模拟信号输入&#xff0c;由处理器完成ADC0的A/D转…...

Nexus私有仓库+IDEA配置远程推送

目录 一、docker安装nexus本地私服&#xff0c;Idea通过maven配置deploy本地jar包&#xff08;简单&#xff09; 二、docker push镜像到第三方nexus远程私服&#xff08;shell命令操作&#xff09; 三、springboot通过maven插件自动生成docker镜像并push到nexus私服&#xf…...

idea2023项目上传到gitee

1、按照gitee插件 File——>Settings plugins——>Marketplace下面搜索gitee,然后按照gitee插件 2、上传项目 VCS_——>Share Project on Gitee 如果第一次没登录的需要先登录&#xff0c;登录完后就可以上传了...

【golang】派生数据类型---指针 标识符、关键字等

1、指针 对比C/C中的指针&#xff0c;go语言中的指针显得极为简洁&#xff0c;只是简单的获取某个空间的地址 或者 根据指针变量中的内容 获取对应存储空间的内容等操作。 具体示例如下&#xff1a; go中使用指针需要注意的点&#xff1a; 可以通过指针改变它所指向的内存空…...

深度学习技术

深度学习是什么&#xff1f; 深度学习&#xff0c;英文名为Deep Learning&#xff0c;其实就是机器学习的一种高级形式。它的灵感来源于人脑神经网络的工作方式&#xff0c;是一种让机器可以自主地从数据中学习和提取特征的技术。你可以把它想象成一位小侦探&#xff0c;通过不…...

TCP/IP网络江湖——物理层护江山:网络安全的铁壁防线(物理层下篇:物理层与网络安全)

TCP/IP网络江湖——物理层护江山:网络安全的铁壁防线(物理层下篇:物理层与网络安全) 〇、引言一、物理层的隐私与保密1.1 加密技术的护盾1.2 安全传输协议的密约1.3 物理层的安全控制1.4 面对未知威胁的准备二、电磁干扰与抵御2.1 电磁干扰的威胁2.2 抗干扰技术的应用2.3 屏…...

python-数据可视化-使用API

使用Web应用程序编程接口 &#xff08;API&#xff09;自动请求网站的特定信息而不是整个网页&#xff0c;再对这些信息进行可视化 使用Web API Web API是网站的一部分&#xff0c;用于与使用具体URL请求特定信息的程序交互。这种请求称为API调用 。请求的数据将以易于处理的…...

窗口看门狗

从下往上看: 1. 时钟设置 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//使能独立看门狗时钟 WWDG_SetPrescaler(WWDG_Prescaler_8);//看门狗预分频器WWDG counter clock (PCLK1/4096)/8 2.设置窗口值 实际就是设置WWDG_CR的低七位值, 但是这个值要大于0x40(也就是…...

开发新能源的好处

风能无论是总装机容量还是新增装机容量&#xff0c;全球都保持着较快的发展速度&#xff0c;风能将迎来发展高峰。风电上网电价高于火电&#xff0c;期待价格理顺促进发展。生物质能有望在农业资源丰富的热带和亚热带普及&#xff0c;主要问题是降低制造成本&#xff0c;生物乙…...

error: can‘t find Rust compiler

操作系统 win11 pip install -r requirements.txt 报错如下 Using cached https://pypi.tuna.tsinghua.edu.cn/packages/56/fc/a3c13ded7b3057680c8ae95a9b6cc83e63657c38e0005c400a5d018a33a7/pyreadline3-3.4.1-py3-none-any.whl (95 kB) Building wheels for collected p…...

全面解析MES系统中的车间退料管理

一、车间退料管理的定义&#xff1a; 车间退料是指在生产过程中&#xff0c;将不合格或多余的物料、半成品或成品从车间环节返还到供应链的过程。车间退料管理则是指对这一退料过程进行规范化、系统化的管理和跟踪。 二、车间退料管理的流程&#xff1a; 1. 退料申请&#xf…...

探究finally代码块是否执行

情况一&#xff1a;try代码块正常执行&#xff0c;无异常&#xff0c;finally代码块无retrun&#xff1b; 代码演示 public class Test38 {public static void main(String[] args) {int foo foo();System.out.println("foo:" foo);}public static int foo() {tr…...

leetcode刷题(字符串相加、包含每个查询的最小区间、模拟行走机器人、环形子数组的最大和、满足不等式的最大值、四数之和、树中距离之和)

目录 1、字符串相加 2、包含每个查询的最小区间 3、模拟行走机器人 4、环形子数组的最大和 5、满足不等式的最大值 6、四数之和 7、 树中距离之和 1、字符串相加 class Solution:def addStrings(self, num1: str, num2: str) -> str:i len(num1) - 1 # num1的末…...

Grafana reporter定时报表踩坑记录

前言:本以为测试grafana reporter功能能很顺利,但按照网上大佬分享的记录进行操作,屡屡报错,不知是因为我的grafana部署在k8s中之前由低版本升级到高版本导致的,还是其他原因,在grafana中安装Grafana Image Renderer 一直报错。 Github地址:https://github.com/IzakMar…...

Flutter 状态管理引子

1、为了更好地了解状态管理&#xff0c;先看看什么是状态。 在类似Flutter这样的响应式编程框架中&#xff0c;我们可以认为U相关的开发就是对数据进行封装&#xff0c;将之转换为具体的U1布局或者组件。借用Flutter官网的一张图&#xff0c;可以把我们在第二部分做的所有开发…...

CFC编程入门_【10分钟学会】

什么是CFC&#xff1a; 【差不多10分钟全学会】 CFC是图形化编程&#xff0c; 跟单片机的连线一样&#xff0c; 唯一的区别&#xff1a;功能块右侧是【只能输出】引脚。 只有左侧引脚可以输入输出。 有哪些控件&#xff1a; 指针&#xff1a;用于拖动功能块。 控制点&#xf…...

golang无需创建新切片

在 Go 语言中&#xff0c;append(b, 0)[:len(b)] 是一种常见的用法&#xff0c;用于在切片 b 后追加一个元素&#xff0c;并返回旧切片的前 len(b) 个元素。 这种用法的目的是将一个新元素追加到切片中&#xff0c;并确保切片的长度保持不变。具体步骤如下&#xff1a; 1. ap…...

Django基础5——ORM中间程序

文章目录 一、基本了解二、ORM基本操作2.1 连接数据库2.1.1 使用sqlite数据库2.1.2 使用MySQL数据库 2.2 对数据库操作2.2.1 增&#xff08;前端数据——>数据库&#xff09;2.2.2 查&#xff08;数据库——>前端展示&#xff09;2.2.3 改&#xff08;修改数据&#xff0…...

SpringAOP详解(上)

当需要在方法前后做一些操作就需要借助动态代理来实现 一、动态代理实现方法 1、jdk自带实现方式 jdk实现代理是被代理类实现接口的方式 public interface UserInterface {void test(); }public class UserService implements UserInterface {public void test() {System.o…...

文渊智阁:教育智能化的技术革新与实践

在人工智能技术飞速发展的今天&#xff0c;教育智能化已成为推动科研与教学变革的重要力量。湖北文渊智阁互联网科技有限公司&#xff08;以下简称“文渊智阁”&#xff09;凭借其深厚的技术积累和创新能力&#xff0c;在教育智能化领域取得了显著成果。本文将深入探讨文渊智阁…...

LDAP查询服务延时查询及问题排查处理

文章目录一、使用服务器管理器管理本地和远程服务器二、LDAP查询用时三、LDAP查询高延迟排查步骤推荐阅读一、使用服务器管理器管理本地和远程服务器 默认情况下&#xff0c;服务器管理器包含在 Windows Server 中&#xff0c;无需单独安装。 在以下步骤中&#xff0c;将使用服…...

DHT11温湿度数据不准?可能是时序问题!用51单片机(STC12)和逻辑分析仪调试避坑指南

DHT11温湿度传感器时序调试实战&#xff1a;从波形分析到代码优化 1. 问题现象与初步排查 当你完成DHT11驱动代码编写&#xff0c;满怀期待地烧录到STC12单片机后&#xff0c;却发现OLED屏幕上显示的温湿度数据时而不准确、时而完全错误。这种问题在嵌入式开发中并不罕见&#…...

5个真正赚钱的 AI 工作流 (2026)

AI驱动的创作者经济预计在2026年将达到57.1亿美元。但大多数使用AI工具的人仍然把它们当作搜索引擎——提问&#xff0c;获取答案&#xff0c;关闭标签页&#xff0c;明天重新开始。真正赚到钱的人发现了不同的东西&#xff1a;他们建立了能复合增长的工作流。代理每次运行都会…...

阀门耐火试验报告中的关键信息该怎么看?

很多人在拿到阀门耐火试验报告后&#xff0c;第一眼往往先看最终结论&#xff1a;合格还是不合格&#xff1f;其实&#xff0c;对于技术人员、质量人员和采购验收人员来说&#xff0c;耐火试验报告不应只看最后一行结论。报告中的样品信息、检测依据、试验项目、结果描述和实验…...

ARM嵌入式项目存储选型指南:从eMMC到SD卡,如何平衡性能、可靠性与成本

1. 项目概述&#xff1a;为什么存储选型是ARM嵌入式项目的“命门”&#xff1f;干了十几年嵌入式开发&#xff0c;从早期的ARM7、ARM9到现在的Cortex-A系列&#xff0c;经手的项目少说也有上百个。我发现一个很有意思的现象&#xff1a;很多工程师在选型时&#xff0c;CPU主频、…...

【Perplexity数据验证黄金标准】:基于ISO/IEC 25010质量模型的6维可信度评估框架

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity数据验证黄金标准的定义与演进 Perplexity&#xff08;困惑度&#xff09;作为衡量语言模型预测能力的核心指标&#xff0c;其数据验证黄金标准并非静态规范&#xff0c;而是随建模范式、评估粒度与…...

VT2516A板卡进阶玩法:模拟汽车线束开路/短路故障,做更真实的ECU诊断测试

VT2516A板卡实战&#xff1a;构建汽车线束故障注入测试系统 在汽车电子控制系统开发中&#xff0c;ECU对电气故障的检测和处理能力直接关系到整车安全性和可靠性。传统测试方法往往局限于理想工况下的信号模拟&#xff0c;难以覆盖真实车辆可能遭遇的线束开路、短路等异常场景…...

PSIM与ModelSim的VHDL联合仿真:数字电源控制算法验证利器

1. 项目概述&#xff1a;为什么要在PSIM里搞VHDL联合仿真&#xff1f;做电源硬件或者电力电子控制的朋友&#xff0c;肯定对PSIM不陌生。它是个专门搞电力电子和电机驱动仿真的利器&#xff0c;开关器件模型准&#xff0c;仿真速度快&#xff0c;画起主功率拓扑来那叫一个顺手。…...

Taotoken在应对大模型API服务波动时的路由与容灾机制体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken在应对大模型API服务波动时的路由与容灾机制体验 1. 背景与观测场景 在开发实践中&#xff0c;我们时常会遇到依赖的某个…...