本篇文章将向大家介绍如何在屏上实现自定义的绘画。
首先,要进行绘图必然得有一个绘图的目标区域,在PersimM中,可以在页面上单独提供一块画布,在这个画布上就可以进行绘图操作了。即 在设计器上,在一个Page中添加一个Canvas对象,背景色设置为白色,字体选择hz 16
基于脚本的画布
在设计器中我们把"Canvas1"画布对象拖放出来,会发现它的区域默认是没有其他额外的显示。要对画布对象操作,我们必须使用脚本的方式,我们在脚本中可以通过以下的方式返回这个名字为"Canvas1"的画布对象:
var context = pm.createCanvas("Canvas1", this);
一般的画布操作
饼图
在这一小节中,我们将介绍如何在画布上绘制一个饼图:
var data = [ 20, 30, 40, 50, 60, 70 ];
//饼图数据
var colors = [ "#ff0000", "#ffff00", "#ff00ff", "#00ff00", "#00ffff", "#0000ff"];
//饼图颜色
var context = pm.createCanvasContext('Canvas1', this)
//获取画布对象
if (context)
{
var total = 0;
//饼图数据总和
for( var index = 0; index < data.length; index++ )
{
total += data[ index ];
}
var point = { x: 200, y: 200 };
//圆心坐标,相对于画布
var radius = 150;
//半径
var start = -0.5 * Math.PI;
//起始弧度
for( var i = 0; i < data.length; i++ )
{
var stop = start + data[ i ] / total * 2 * Math.PI;
//结束弧度
context.beginPath();
//开始新的路径
context.arc( point.x, point.y, radius, start, stop, false);
//画一段圆弧
context.lineTo( point.x, point.y );
//连接圆弧终点和圆心
context.setFillStyle( colors[ i ] );
//设置填充颜色
context.fill();
//填充路径
context.closePath();
//关闭路径
start = stop;
//起始弧度更新
}
context.draw();
//更新画布
}
直接放到板子上,看看运行的效果,运行效果如下:
实际效果
学习营学员作品 汽车仪表盘
我们学习营中的小伙伴还用画布制作出了帅气的汽车仪表盘!
不仅如此,还做出了加减速的动画效果!
RT-Thread
让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。GPLv2+协议,可免费在商业产品中使用。
扫描二维码,关注我们