柿饼M之画布

本篇文章将向大家介绍如何在屏上实现自定义的绘画。

首先,要进行绘图必然得有一个绘图的目标区域,在PersimM中,可以在页面上单独提供一块画布,在这个画布上就可以进行绘图操作了。即 在设计器上,在一个Page中添加一个Canvas对象,背景色设置为白色,字体选择hz 16

带你进入绚丽多彩的柿饼M(四)_物联网

基于脚本的画布

在设计器中我们把"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();     
                  //更新画布

}

直接放到板子上,看看运行的效果,运行效果如下:

带你进入绚丽多彩的柿饼M(四)_数据_02

实际效果

带你进入绚丽多彩的柿饼M(四)_二维码_03

学习营学员作品 汽车仪表盘

我们学习营中的小伙伴还用画布制作出了帅气的汽车仪表盘!

带你进入绚丽多彩的柿饼M(四)_物联网_04

不仅如此,还做出了加减速的动画效果!

 

带你进入绚丽多彩的柿饼M(四)_二维码_05

 

带你进入绚丽多彩的柿饼M(四)_二维码_06

 

带你进入绚丽多彩的柿饼M(四)_二维码_07

RT-Thread


让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。GPLv2+协议,可免费在商业产品中使用。

扫描二维码,关注我们