【问题标题】:Determine if the list view is about to stop scrolling?确定列表视图是否即将停止滚动?
【发布时间】:2014-05-07 02:23:40
【问题描述】:

我需要在列表视图被抛出并即将停止后在列表视图中做一些动画。我有一个列表视图,它的高度是固定的(别问我为什么),每当滚动停止时,它应该有三个可见的元素。我现在要做的是检测列表何时到达SCROLL_STATE_IDLE,如果当时我有两个元素可见,我使用smoothScrollToPosition 并达到可见 3 个项目的状态,它工作正常,但我想做的是检测滚动何时停止,并在有三个可见项目时以编程方式停止滚动。这是否可能...任何代码 sn-ps、伪代码、算法都会帮助我。

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以设置OnScrollListener,然后从 absListView.getScrollY() 中存储每个样本的值,并将其与前一个样本进行比较以计算滚动速度。一旦低于您定义的阈值,您就可以接管滚动。

    【讨论】:

    • getScrollY 在列表视图上总是返回 0。请看这个:-stackoverflow.com/questions/2132370/…
    • 啊,该死的。如何使用这样的东西来计算滚动速度:stackoverflow.com/questions/7895504/…
    • 我已经在使用它了,但问题是怠速前的最终速度不一致。有时它会达到阈值,有时它不会。因此,例如:-您决定在速度达到 10 时控制滚动,有时您会意识到,当速度达到 16 时,滚动停止。可以说您可以提高阈值,但是有很多其他问题,尤其是当用户慢慢地扔掉列表时。
    • 我认为要使其正常工作,您可能需要实现自己的滚动。您可以使用VelocityTracker 计算速度,然后为滚动偏移设置动画以准确地停在您想要的位置。如果您知道需要滚动的确切距离,则可以使用如下内容: private void computeAcceleration() { mAccel = (float) ((2*(mGoalPosition-mStartPosition)-2*mDuration*mVel)/Math.pow( mDuration,2)); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多