【WPF动画】实现水波纹动画进度条

9 篇文章 0 订阅

效果图

在这里插入图片描述
可以自己绘制成圆形等任意形状到Canvas

核心代码部分

绘制部分

 //Value:当前进度值
 _streamGeometry = GetSinGeometry(this.Width, -5, 1 / 30.0, -this.Width + this.Width * Value / 100, this.Height - this.Height * Value / 100);
GeometryGroup group = new GeometryGroup();
group.Children.Add(_streamGeometry);

 Path myPath = new Path
 {
     Fill = Brushes.DarkGreen,
     Data = group
 };
//绘制
 this.Canvas.Children.Add(myPath);

正弦曲线计算波纹

/// <summary>
/// 正弦曲线计算
/// </summary>
/// <param name="waveWidth">水纹宽度</param>
/// <param name="waveA">水纹振幅</param>
/// <param name="waveW">水纹周期</param>
/// <param name="offsetX">位移</param>
/// <param name="currentK">当前波浪高度</param>
/// <returns></returns>
private StreamGeometry GetSinGeometry(double waveWidth, double waveA, double waveW, double offsetX, double currentK)
{
    StreamGeometry g = new StreamGeometry();
    using StreamGeometryContext ctx = g.Open();
    ctx.BeginFigure(new Point(0, waveWidth), true, true);
    for (int x = 0; x < waveWidth; x += 1)
    {
        double y = waveA * Math.Sin(x * waveW + offsetX) + currentK;
        ctx.LineTo(new Point(x, y), true, true);
    }
    ctx.LineTo(new Point(waveWidth, waveWidth), true, true);
    return g;
}

源码传送门

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离歌漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值