java如何画百分比圆环_canvas绘制百分比圆环进度条

开发项目,PM会跟踪项目进度;完成某个事情,也可以设置一个完成的进度。

这里用canvas绘制一个简单百分比圆环进度条。

看下效果:

1. 动画方式

2. 静默方式

贴上代码,仅供参考

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/**

* LBS drawRing

* Date: 2015-04-24

* ==================================

* opts.parent 插入到哪里 一个JS元素对象

* opts.width 宽度 = 2* (半径+弧宽)

* opts.radius 半径

* opts.arc 弧宽

* opts.perent 百分比

* opts.color 弧渲染颜色 [底色,进度色]

* opts.textColor 文字渲染颜色

* opts.textSize 文字渲染大小

* opts.animated 是否以动画的方式绘制 默认false

* opts.after 绘制完成时执行函数

* ==================================

**/

functiondrawRing(opts) {var _opts ={

parent: document.body,

width:100,

radius:45,

arc:5,

perent:100,

color: ['#ccc', '#042b61'],

textColor:'#000',

textSize:'14px',

animated:false,

after:function() {}

}, k;for (k in opts) _opts[k] =opts[k];var parent =_opts.parent,

width=_opts.width,

radius=_opts.radius,

arc=_opts.arc,

perent=parseFloat(_opts.perent),

color=_opts.color,

textSize=_opts.textSize,

textColor=_opts.textColor,

c= document.createElement('canvas'),

ctx= null,

x= 0,

animated=_opts.animated,

after=_opts.after;

parent.appendChild(c);

ctx= c.getContext("2d");

ctx.canvas.width=width;

ctx.canvas.height=width;functionclearFill() {

ctx.clearRect(0, 0, width, width);

}functionfillBG() {

ctx.beginPath();

ctx.lineWidth=arc;

ctx.strokeStyle= color[0];

ctx.arc(width/ 2, width / 2, radius, 0, 2 *Math.PI);

ctx.stroke();

}functionfillArc(x) {

ctx.beginPath();

ctx.lineWidth=arc;

ctx.strokeStyle= color[1];

ctx.arc(width/ 2, width / 2, radius, -90 * Math.PI / 180, (x * 3.6 - 90) * Math.PI / 180);

ctx.stroke();

}functionfillText(x) {

ctx.font= textSize + ' Arial';

ctx.fillStyle=textColor;

ctx.textBaseline= "middle";

ctx.textAlign= 'center';

ctx.fillText(x.toFixed(1) + '%', width / 2, width / 2);

}functionfill(x) {

fillBG();

fillArc(x);

fillText(x);

}if (!animated) returnfill(perent);

fill(x);!functionanimate() {if (++x > perent) return after &&after();

setTimeout(animate,10);

clearFill();

fill(x);

}();

}

View Code

很简单的一段代码

先创建一个canvas画布对象,设置宽高。

var c = document.createElement('canvas');

document.body.appendChild(c);var ctx = c.getContext("2d");

ctx.canvas.width=width;

ctx.canvas.height= width;

圆环由两部分组成,底部灰色完整的环,根据百分比变动的环。

先绘制底部完整的环。

//起始一条路径

ctx.beginPath();//设置当前线条的宽度

ctx.lineWidth = 10; //10px//设置笔触的颜色

ctx.strokeStyle = '#ccc';//arc() 方法创建弧/曲线(用于创建圆或部分圆)

ctx.arc(100, 100, 90, 0, 2 *Math.PI);//绘制已定义的路径

ctx.stroke();

arc方法默认是从3点钟方向(90度)开始绘制的,一般要把这个开始处设置平常习惯的0点方向。

也需要理解弧度和角度的互相转换。

degrees = radians * 180/Math.PI

角度等于弧度乘于180再除于PI

radians= degrees * Math.PI/180

弧度等于角度度乘于PI再除于180

绘制根据百分比变动的环。

ctx.beginPath();

ctx.lineWidth= 10;

ctx.strokeStyle= '#f30';//设置开始处为0点钟方向(-90 * Math.PI / 180)//x为百分比值(0-100)

ctx.arc(100, 100, 90, -90 * Math.PI / 180, (x * 3.6 - 90) * Math.PI / 180);

ctx.stroke();

绘制中间的文字

ctx.font = '40px Arial';

ctx.fillStyle= '#f30';

ctx.textBaseline= 'middle';

ctx.textAlign= 'center';

ctx.fillText('50.0%', 100, 100);

到此一个静止的百分比圆环进度条就绘制完成了。

不满足于绘制静态的,动态的更生动有趣一些。

canvas动态绘制就是在一段时间内:绘制一个区域的内容,清除这个区域内容,再重新绘制内容,重复这个过程(绘制-清除-绘制)。

有兴趣可以去研究一下,上面的代码也可以参考,如果结合动画函数和运动公式可以绘制更生动的百分比圆环进度条哦。

--------------------------------------------

参考:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python单链表操作、建立头指针为h的单链表_在一头指针为H的单链表中,若要向表头插入一个由指针p指向的结点,则应执行( )操作。 (5.0分)_学小易找答案...

【单选题】【简答题】什么叫消费者市场?【单选题】安全生产管理模式九个不中的“三不准”指 :【单选题】在一个单链表中,若要在p所指向的结点之后插入一个新结点,则需要相继修改( )个指针域的值。 (5.0分)【单选题】TCP坐标出厂时默认位于哪里?【多选题】在通常情况下,下列哪…

mysql填写账户远程_mysql账户添加远程访问

我们要将root账户设置为远程可访问mysql> show databases;--------------------| Database |--------------------| here || information_schema || mysql || performance_schema || sys |--------------------选择mysql数据库mysql> use mysql;Reading table informatio…

java密码框提示_[Java教程]如何实现在密码框如出现提示语

[Java教程]如何实现在密码框如出现提示语02015-12-25 13:00:14如何实现在密码框如出现提示语:有时候我们需要在登陆表单有一些提示语言,比如“请输入用户民”和“请输入密码”等语言,至于用户名好说,但是在密码框中出现“请输入密码”这样的语…

linux 休眠定时唤醒_Linux重启关机命令经验之谈

请关注本头条号,每天坚持更新原创干货技术文章如需学习视频,请查看本头条号简介,免费在线观看学习视频一般来说,Linux服务器都保存着重要文件和服务,不当使用将可能导致数据丢失甚至是灾难。同样,正确的关闭…

java formfile_基于Struts文件上传(FormFile)详解

Struts中FormFile用于文件进行上传1.在jsp文件中进行定义名字:头像:2.在Form表单中定义FormFile/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/package com.yourcompany.struts.form;import javax.servlet.http.HttpServletReq…

空白世界地图打印版_考研准考证打印什么时候_中国研究生招生信息网官网

考研准考证打印什么时候_中国研究生招生信息网官网由广东研究生考试网考试快讯栏目由提供,更多关于考研准考证打印入口,广东研究生考试快讯的内容,请关注广东研究生考试频道/广东人事考试网!2021考研人注意啦!2021考研准考证下载时间及入口12…

debian java7_Debian 7 和 Debian 8 用户怎样安装 Oracle Java 8

Oracle Java 8 稳定版本近期已发布,有很多新的特征变化。其中,有功能的程序支持通过“Lambda项目 ”,收到了一些安全更新和界面改进上的bug修复,使得开发人员的工作更容易。本文将告诉你如何在Debian 7 “Wheezy”和Debian 8 “Je…

python创建虚拟环境venv_Python 3 使用venv创建虚拟环境

Python 3.3以上使用venv来代替了原来Python2使用的virtualenv创建虚拟环境。虚拟环境的作用是使得不同项目的Python包之间不会相互干扰,避免了由此产生的各种问题。现在演示下如何在桌面创建一个虚拟环境C:\Users\dell\Desktop>mkdir python3VenvTestC:\Users\de…

jdbc java连接oracle_java连接oracle jdbc连接

Class.forName("oracle.jdbc.driver.OracleDriver");Connection ctDriver.Magager.getConnection("jdbc:oracle:thin:127.0.0.1:1521:orcl","scott","tiger");java连接oracle odbc桥连接:Class.forName("sun.jdbc.odb…

python获取终端输出流_Linux下用Python获取命令行输出的几个方案

Python在慢慢成为脑影像数据处理中的主流语言。而在做脑影像处理时,不免有时候需要用到一些别人开发好的工具包,而这些包并不都是python包。下面是学习啦小编收集整理的Linux下用Python获取命令行输出的几个方案,希望对大家有帮助~~Linux下用…

广州python平均薪资_爬取广州的python和Java薪资,为什么Python 高于Java(有代码)...

标签:小编不知道这个是不是属于那个啥,要看的赶紧看,说不定小编的号要被封了。用python爬取了某某某直聘网站,直聘Python和Java的招聘信息,比较了两个方向的发展前(钱)途 ,主要是本科生。为了前(钱)途 冲啊…

hdu java_HDU-java实现1176

免费馅饼Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 58323 Accepted Submission(s): 20514Problem Description都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下…

python实现多语言语种识别_用Python进行语言检测

最近正好碰到这个需求,总结一下用Python进行语言检测的方法。1.用unicode编码检测汉字、韩文、日文等都有对应的unicode字符集范围,只要用正则表达式匹配出来即可。在判断的时候,往往需要去掉一些特殊字符,例如中英文标点符号。可…

vestacp 远程mysql_免费使用VestaCP控制面板的文件管理器 | 雷雨博客

VestaCP是由俄罗斯人编写的免费虚拟主机控制面板,该面板功能强大,即可自用也可对接WHMCS销售。不过面板并不支持免费的文件管理,官网的商业项目为 “File Manager”(月付3刀,终身50刀)及“SFTP Chroot”(月付1刀,终身1…

千寻位置 开发demo_java程序开发,使用javaagent无侵入代码方式,监控方法执行耗时...

背景描述javaagent是在JDK5之后提供的新特性,也可以叫java代理。开发者通过这种机制(Instrumentation)可以在加载class文件之前修改方法的字节码(此时字节码尚未加入JVM),动态更改类方法实现AOP,提供监控服务如;方法调用时长、可用…

java jpg结构_Java Class 字节码文件结构分析----附带逐字节码分析图

欢迎访问我的博客,同步更新: 枫山别院 今天给大家分享下Java Class字节码文件的结构解析。(文末附有详细大图)代码首先我们创建一个Java类,然后添加一些成员变量和方法,如下:public class Test {String name "hello";int size 10…

泊松分布的分布函数_《可靠性设计》——常用的概率分布

超几何分布:在总数为N、不合格品率为p的一批产品中随机抽取n个样品,且样品中r个不合格品的概率为则称x服从超几何分布。 当N很大时,上式计算相当烦琐,此时可以用二项分布或泊松分布来近似。二项分布:二项分布又称为Ber…

java jvm性能调优_《Java 底层原理》Jvm性能调优

前言Java 的性能调优,主要就是为了防止出现out of memory(oom)。Java出现oom就会直接导致程序停止运行。调优模拟元空间oom的情况importnet.sf.cglib.proxy.Enhancer;importnet.sf.cglib.proxy.MethodInterceptor;importnet.sf.cglib.proxy.MethodProxy;importjava.…

yota3墨水屏设置_汉阳环卫工节前给道路隔音屏“洗澡”

楚天都市报9月27日讯(记者卢成汉 通讯员肖赟 肖利)据了解,三环线汉阳段连接硚口区和经济技术开发区,是货运主通道和入城环路,墨水湖北路二环线延长线高架是二环线汉阳中心城区与三环线的重要连接道,都属“城市快速路”&#xff0c…

java atd_Java字符串String详解

1、String字符串实例化String对象:(1)直接赋值,如:String str"hello";(2)使用关键字 new,如:String strnew String("hello");由图可知:使用 new 的方式在堆内存中开辟了两个空间&#…