gpt4 book ai didi

android - 添加子项时如何正确地继续滚动 ScrollView?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:42:56 28 4
gpt4 key购买 nike

上下文:我有一个 ScrollView,它可能在快速浏览期间将子项添加到其内容 View 中。由于在添加这些子项之前 ScrollView 内容 配置了 fling,如果添加了子项,则 fling 会自行停止(实际上会向后滚动一点,因为过度滚动),即使它还没有到达内容的底部。

我可以使用 #fling(int velocity) 重新启动 fling,但我想不出一种方法来获取当前的 fling 速度或停止当前的 fling。有什么想法吗?

最佳答案

根据提示回答您的问题:

  • 没有获取 ScrollView 当前速度的 API。
  • 您可以按照之前 SO post 中所述小心处理触摸事件来停止当前的 fling。 .

查看 ScrollView source code ,它使用 OverScroller 来处理 fling 事件。有两种方法可以解决这个问题:

  1. 使用反射访问 ScrollView 中的 mScroller 私有(private)字段。一旦你访问了它,你就可以通过它的公共(public) API 获得当前速度:public float getCurrVelocity(); 使用反射从来都不是理想的,因为你不得不担心它会跨越 android 版本,但是一个简单的隔离使用效率相对较高。
  2. 覆盖fling() method in ScrollView并实例化一个 OverScroller 来跟踪滚动。如果一切顺利,您的 Overscoller 将始终处于与 ScrollView 中的状态相同的状态。

像这样:

@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);
}

关于android - 添加子项时如何正确地继续滚动 ScrollView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060423/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com