使用Cavans.drawText()心得

本文探讨了Android中Canvas.drawText()方法如何基于字符基线进行绘制,并通过Paint.getTextMetricsInt()方法获取与Paint对象中设置的字体大小和类型相关的基线、上升沿和下降沿等信息。

使用Android中的Canvas.drawText()去写一串字符时,是安装这种字符的基线去写的。

Paint.getTextMetricsInt()方法可以获得跟这个text paint中的字符大小和typeface关联的baseline信息,还有ascent和descent信息。ascent是baseline之上的空间(数值为负),descent是baseline之下的空间(数值为正)。

 

在 JavaScript 中使用 HTML5 的 `<canvas>` 元素进行绘图和动画处理,是现代 Web 开发中实现图形交互的重要方式。通过获取画布的上下文(如 `2d` 上下文),开发者可以调用一系列 API 来绘制形状、文本、图像以及创建复杂的动画效果。 ### 获取 Canvas 上下文 首先,在 HTML 中定义一个 `<canvas>` 元素,并为其指定唯一的 `id` 属性以便于后续操作: ```html <canvas id="myCanvas" width="500" height="300"></canvas> ``` 然后,在 JavaScript 中通过 `document.getElementById()` 方法获取该元素,并调用 `getContext('2d')` 获取 2D 绘图上下文: ```javascript const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ``` ### 基本绘图操作 #### 绘制矩形 使用 `fillRect(x, y, width, height)` 方法可以绘制填充矩形: ```javascript ctx.fillStyle = 'blue'; ctx.fillRect(10, 10, 100, 100); ``` #### 绘制路径 可以通过 `beginPath()`、`moveTo(x, y)`、`lineTo(x, y)` 等方法绘制自定义路径并描边或填充: ```javascript ctx.beginPath(); ctx.moveTo(50, 50); ctx.lineTo(150, 50); ctx.lineTo(100, 150); ctx.closePath(); ctx.strokeStyle = 'green'; ctx.stroke(); ctx.fillStyle = 'yellow'; ctx.fill(); ``` #### 绘制圆形 使用 `arc(x, y, radius, startAngle, endAngle)` 方法绘制圆形: ```javascript ctx.beginPath(); ctx.arc(100, 100, 50, 0, Math.PI * 2); ctx.fillStyle = 'red'; ctx.fill(); ctx.strokeStyle = 'black'; ctx.stroke(); ``` ### 动画处理 动画的核心在于不断地清除画布并重新绘制内容。通常使用 `requestAnimationFrame()` 方法来实现高效的动画循环。 以下是一个简单的移动圆动画示例: ```javascript let x = 0; function animate() { ctx.clearRect(0, 0, canvas.width, canvas.height); // 清除画布 ctx.beginPath(); ctx.arc(x, 100, 30, 0, Math.PI * 2); ctx.fillStyle = 'purple'; ctx.fill(); x += 2; if (x > canvas.width) { x = 0; } requestAnimationFrame(animate); // 请求下一帧 } animate(); // 启动动画 ``` ### 使用第三方库简化开发 对于更复杂的图形和交互需求,可以借助如 Fabric.js 这样的库来简化开发流程。例如,使用 Fabric.js 创建一个带有旋转角度的矩形对象[^2]: ```javascript const fabricCanvas = new fabric.Canvas('fabricCanvas'); const rect = new fabric.Rect({ left: 100, top: 100, fill: 'red', width: 200, height: 100, angle: 45 }); fabricCanvas.add(rect); ``` ### 图像导出与截图功能 若需将画布内容导出为图片,可使用 `toDataURL()` 方法获取 Base64 编码的图像数据: ```javascript const dataURL = canvas.toDataURL('image/png'); console.log(dataURL); ``` 此外,还可以使用 html2canvas 库将整个 HTML 页面渲染到 canvas 并导出截图[^3]: ```javascript html2canvas(document.body).then(canvas => { document.body.appendChild(canvas); }); ``` ### 注意事项 - `<canvas>` 标签内部的内容仅在浏览器不支持该标签时显示,通常用于提供替代文本或图像[^4]。 - 所有绘图操作必须在获取上下文之后执行。 - 动画性能优化应优先使用 `requestAnimationFrame()` 而非 `setInterval()` 或 `setTimeout()`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值