组件位置平滑移动的一种方法
在使用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) { }}??