我使用下面的代码在自定义视图中实现垂直投影。 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);
}
}
}