OverScroller fling并不总是在它应该的地方完成动画

时间:2014-11-25 23:28:18

标签: android android-animation scroller

我使用下面的代码在自定义视图中实现垂直投影。 mViewsHeight只是一个偏移,它有助于计算出最大值并且是一个正确的计算。 mViewsTop是一个变量,可以帮助我跟踪子视图及其相对yposition。大部分时间,投掷都按预期工作。然而,在一些游戏中,我注意到它并没有完成getFinalY()所说的应该完成的地方。例如,minY将设置为0,finalY也将等于0,但由于某种原因,视图不会始终与顶视图一致,与父视图的顶部对齐。我彻底调试了它,我可以看到它有时会起作用,而不会影响其他人。我不是以任何方式阻碍动画;它似乎没有到达它应该达到的地方。

有没有其他人经历过类似的事情,并且有没有人有解决方案如何确保fling动画将在其意图结束的地方结束(即getFinalY()所说的应该)?

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        int maxY;
        if (mViewsHeight > getHeight()) {
            maxY = mViewsHeight - getHeight();
            int startY = getScrollY();
            scroller.fling(0, startY, 0, (int) -velocityY, 0, 0, 0, maxY,
                    0, 30);
            int finalY = scroller.getFinalY();
            mViewsTop = -finalY;
        }
        return true;
    }

@Override
public void computeScroll() {
    super.computeScroll();
    if (scroller.computeScrollOffset()) {
        int currX = scroller.getCurrX();
        int currY = scroller.getCurrY();
        boolean canScrollY = (mViewsTop < 0 || getChildAt(0).getBottom() > getHeight());
        if (canScrollY) {
            scrollTo(currX, currY);
        }
    }
}

0 个答案:

没有答案