在使用Swing做界面时,有时为了效果更绚丽或者能提供更好的用户体验
我们通常希望一些变化,尤其是位置的变化能以一种平滑过渡的方法呈现出来
算法思想很简单,就是差值法,在起点和终点之间计算很多冗余位置,间隔时间分别经过各个位置,最终在到达终点
我写的算法是等时间间隔,步长逐渐变短的过程
步长变化趋势采用 f(x)=1/x 函数来模拟,在减少复杂度的情况下能很好的保证效果
当然下面的代码是阻塞的,必须在线程中运行才能显示出动画效果
c 表示想要移动的组件, p2 表示目的坐标 ( 起始坐标是当前位置 )
可以改的地方有
32,表示移动次数
12,表示每次移动延时
public static void smoothMove(Component c, Point p2) {
try {
int i = 0;
Point p1 = c.getLocation();
float da;
while (i++ < 32) {
da = 1f / i - 1f / 32;
c.setLocation((int) (p2.x + (p1.x - p2.x) * da + 0.5), (int) (p2.y + (p1.y - p2.y) * da + 0.5));
c.getParent().repaint();
Thread.currentThread();
Thread.sleep(12);
}
} catch (Exception e) {
}
}