组件位置平滑移动的一种方法

在使用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) {
    }
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值