背景:我有一个ScrollView
,在它滑动的过程中可能会添加子元素到其内容视图中。因为滑动是在添加这些子元素之前根据ScrollView
内容的高度配置的,如果添加了这些子元素,那么滑动就会停止(实际上还会因为超出滚动而向后滚动一点),即使它还没有滚动到内容的底部。
我可以使用#fling(int velocity)
重新启动滚动,但我找不到获取当前滚动速度或停止当前滚动的方法。有什么建议吗?
背景:我有一个ScrollView
,在它滑动的过程中可能会添加子元素到其内容视图中。因为滑动是在添加这些子元素之前根据ScrollView
内容的高度配置的,如果添加了这些子元素,那么滑动就会停止(实际上还会因为超出滚动而向后滚动一点),即使它还没有滚动到内容的底部。
我可以使用#fling(int velocity)
重新启动滚动,但我找不到获取当前滚动速度或停止当前滚动的方法。有什么建议吗?
回答提示中的问题:
查看ScrollView源代码,它使用OverScroller来处理飞滑事件。有两种方法可以解决这个问题:
public float getCurrVelocity();
使用反射并不理想,因为您需要担心它在Android版本之间的兼容性问题,但是一个简单的隔离用法可以相对高效。类似这样:
@Override
public void fling(int velocityY)
{
// Pass through fling to parent
super.fling(velocityY);
// Keep track of velocity using our own Overscoller instance
mOurOverscroller = mScroller.fling(mScrollX, mScrollY, 0, velocityY, 0, 0, 0,
Math.max(0, bottom - height), 0, height/2);
}
我用@Override
fling方法解决了类似的问题。如果你在ScrollViewNoFling
类中重写fling
方法,但不在此方法中调用super.fling
,那么你将得到一个未处理fling的scrollView
。
@Override
public void fling (int velocity)
{
/*Scroll view is no longer going to handle scroll velocity.
* super.fling(velocity);
*/
}