38.qt quick-QML水纹波进度条

1.效果展示

38.qt quick-QML水纹波进度条

 

2.源码介绍

可以设置的属性如下所示:

38.qt quick-QML水纹波进度条

可以支持自定义颜色、波纹幅度、水波流动速度、采样点数目(嵌入式效果差的话可以适当降低增加画面刷新速度).

具体绘制逻辑如下所示:

var j = 0;
function draw(ctx) {
    var r = canvas.width/2                    // 半径
    var d = r*2                               // 直径
    var p = control.value/100                 // 百分比
    var pointCnt = control.sampleCnt;         // 采样点
    if (pointCnt > d) {
        pointCnt = d
    }
    var pointOffset = d / pointCnt
    ctx.save()
    ctx.clearRect(0,0,d,d);
    ctx.lineWidth = 1.5
    ctx.translate(canvas.width/2,canvas.height/2)   // 设置中心位置
    ctx.beginPath()
    ctx.arc(0,0,r,0,2*Math.PI)
    ctx.closePath()
    ctx.clip()              // 从当前路径创建裁剪区域,区域外的任何部分都不显示

    ctx.beginPath()
    var y = r-p*canvas.width;
    var i;
    ctx.moveTo(-r,y)
    for(i=0;i<pointCnt;i++) {
        ctx.lineTo(-r+i*pointOffset,y+control.ratio*Math.sin((i*pointOffset+j)*Math.PI/180))
    }
    ctx.lineTo(r,y+control.ratio*Math.sin((d+j)*Math.PI/180))
    ctx.lineTo(r,r)
    ctx.lineTo(-r,r)
    ctx.closePath()
    var foregroundColor1 = control.foregroundColor;
    foregroundColor1.a = 0.3
    ctx.fillStyle = foregroundColor1
    ctx.fill()

    ctx.beginPath()
    ctx.moveTo(-r,y)
    for(i=0;i<pointCnt;i++) {
        ctx.lineTo(-r+i*pointOffset,y+control.ratio*Math.sin((i*pointOffset+j+90)*Math.PI/180))
    }
    ctx.lineTo(r,y+control.ratio*Math.sin((d+j)*Math.PI/180))
    ctx.lineTo(r,r)
    ctx.lineTo(-r,r)
    ctx.closePath()
    var foregroundColor2 = control.foregroundColor;
    foregroundColor2.a = 0.7
    ctx.fillStyle = foregroundColor2
    ctx.fill()

    ctx.restore()
    j += 9*speed;
}

 

 

38.qt quick-QML水纹波进度条

上一篇:2014/7/27------数据库的隔离性


下一篇:更具体但忽略交易策略的回测框架搭建