一、定义缓动动画类
public class AnimationHelper
{
Timer animationTimer = new Timer();
double velocity = 0.0;
Point location = Point.Empty;
double force = 0.01; //0.69;
double drag = 0.8;
private Control control;
//private AxShockwaveFlash control;
private int targetPos=0;
public AnimationHelper(int interval=5)
{
animationTimer.Interval = interval;
animationTimer.Tick += delegate
{
if (control == null) return;
int currentPos = control.Location.X;
if (Math.Abs(currentPos - targetPos) <= 5)
{
control.Location = new Point(targetPos, control.Location.Y);
animationTimer.Stop();
}
int dx = targetPos - currentPos;
velocity += force * dx;
velocity *= drag;
if (Math.Abs(velocity) < 5)
{
if (velocity > 0)
velocity = 5;
else
velocity = -5;
}
control.Location = new Point(currentPos + (int)velocity, control.Location.Y);
};
animationTimer.Start();
}
public void MoveXEx(Control control, int targetPos, Action completeWith = null)
{
this.control = control;
this.targetPos = targetPos;
velocity = 0;
animationTimer.Start();
}
}
二、’使用教程:
AnimationHelper animationHelper = new AnimationHelper();
AnimationHelper animationHelper1 = new AnimationHelper();
private int pos = 0;
private int pos1 = 0;
private int dx = 200;
private void button1_Click(object sender, EventArgs e)
{
animationHelper.MoveXEx(pictureBox2, pos += dx);
animationHelper1.MoveXEx(pictureBox1, pos1 += dx);
}
private void button2_Click(object sender, EventArgs e)
{
animationHelper.MoveXEx(pictureBox2, pos -= dx);
animationHelper1.MoveXEx(pictureBox1, pos1 -= dx);
}
三、效果:
|
请发表评论