android开发教程之使用线程实现视图平滑滚动示例

2019-12-10 20:08:31王冬梅

            }          
            //得到当前这个瞬间的时间戳
            long currentTime = System.currentTimeMillis();      
            //放大倍数,为了扩大除法计算的浮点精度
            int enlargement = 1000;          
            //算出当前这个瞬间运行到整个动画时间的百分之多少
            float rate = (currentTime - startTime) * enlargement / durtion;           
            //这个比率不可能在 0 - 1 之间,放大了之后即是 0 - 1000 之间
            rate = Math.min(rate, 1000);           
            //将动画的进度通过插值器得出响应的比率,乘以起始与目标坐标得出当前这个瞬间,视图应该滚动的距离。
            int changeDistance = (int) ((fromY - toY) * decelerateInterpolator.getInterpolation(rate / enlargement));            
            int currentY = fromY - changeDistance;           
            v.scrollTo(0, currentY);            
            if (currentY != toY) {
                postDelayed(this, this.interval);
            } else {
                return;
            }
        }   
        public void stop() {
            removeCallbacks(this);
        }
    }