【问题标题】:How to use animations to draw a straight line?如何使用动画绘制直线?
【发布时间】:2015-11-03 21:12:07
【问题描述】:

我想在 C# Universal 应用程序后面的代码中画一条线。我尝试使用 Line 类并且线条确实出现了,但我不知道如何制作动画,所以看起来线条是在屏幕中绘制而不是弹出,或者不是从外部传输它屏幕到该位置。我想看到从 A 点到 B 点画线的动画。知道如何实现这一点吗?谢谢!
如果有人能提供一个例子,我将不胜感激
我曾尝试关注此合作,但未成功How do you animate a line on a canvas in C#?

【问题讨论】:

    标签: c# animation storyboard line universal


    【解决方案1】:

    你可以这样尝试:

    简短说明:

    • 有两个点 p1 和 p2。您可以随意设置它们。
    • durationMS 是动画将花费的毫秒数。
    • stepMS 是绘制新线的频率(以毫秒为单位)。
    • 计时器“tmr”执行动画工作

    我们需要计算每一步的宽度,线的角度“k”和它的偏移量“d”。然后我们启动计时器。每个“Tick”都会做同样的事情:

    • 增加计步器

    • 沿线计算新端点

    • 画线

      在最后一步中,用 p1 到 p2 的不同颜色绘制线条。

    这是表单的代码...

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace TestSO {
    
        public partial class Form1 : Form {
            public Form1() { }
    
            PointF p1 = new PointF(10, 10);
            PointF p2 = new PointF(170, 30);
    
            float durationMS = 5000;
            float stepMS = 100;
    
            float stepWidthX;
            float k;
            float d;
    
            private Timer tmr = new Timer();
    
            protected override void OnLoad(EventArgs e) {
                base.OnLoad(e);
    
                stepWidthX = (p2.X-p1.X)/ (durationMS / stepMS);
    
                k = (p2.Y - p1.Y) / (p2.X - p1.X);
                d = (p2.X * p1.Y - p1.X * p2.Y) / (p2.X - p1.X);
                
                tmr.Tick += tmr_Tick;
                tmr.Interval = (int)stepMS;
                tmr.Start();
            }
    
            private int stepCounter = 0;
            void tmr_Tick(object sender, EventArgs e) {
                stepCounter++;
    
                float x = p1.X + stepCounter * stepWidthX;
                float y = k * x + d;
                this.CreateGraphics().DrawLine(Pens.Black, p1, new PointF(x, y));
    
    
                if(stepCounter * stepMS > durationMS){
                    stepCounter = 0;
                    tmr.Stop();
                    this.CreateGraphics().DrawLine(Pens.Red, p1, p2);
                }
            }
    
        }
    }
    

    【讨论】:

    • @ĐầuTo,由于您是 SO 新手,请注意,在这里给出答案的专业人士渴望获得声誉积分。如果您对有用的答案进行投票,那将是非常好的 - 如果一个答案帮助您解决了您的问题 - 您应该将其标记为已接受的答案,这将向其他人表明该问题已解决。谢谢!
    • 哦,对不起,您的帮助确实很有用。我试图投票给你的答案。但是,因为我的声誉未满 15 岁,所以我的投票没有显示出来。
    • @ĐầuTo,没问题,等你的声望点够多后再回来。如果这个答案解决了您的问题,您可能想接受它(在投票柜台下方的检查)。正如他们所看到的,这对我有好处(代表点),对其他人也有好处,这个问题得到了解决。谢谢
    猜你喜欢
    • 2021-02-10
    • 2013-01-07
    • 1970-01-01
    • 2014-07-19
    • 2013-12-21
    • 2014-05-04
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多