如何使用动画绘制直线?

时间:2015-11-02 09:01:53

标签: c# animation storyboard line universal

我想在C#Universal app后面的代码中画一条线。我尝试使用Line类并且该行确实显示,但我不知道如何制作动画,因此它看起来像是在屏幕上绘制线而不是弹出,或者不是从外部传输它屏幕到位置。我想看动画画从A点到B点的线。任何想法我怎么能做到这一点?谢谢!
如果有人可以提供一个这方面的例子,我将非常感激
我试图跟随此公司失败How do you animate a line on a canvas in C#?

1 个答案:

答案 0 :(得分: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);
            }
        }

    }
}