【问题标题】:Android smoothScrollBy behaving badlyAndroid smoothScrollBy 表现不佳
【发布时间】:2011-09-29 16:18:07
【问题描述】:

我有一个ListView,我正在打电话给smoothScrollBy()。 95% 的时间,smoothScrollTo() 的行为符合预期。然而,有时它并没有出现在预期的位置!我已经验证我给它的值是一样的。我注意到当出现错误时平滑滚动不是那么平滑,但是我的应用程序正在执行的其他任务没有我可以控制的。

我不太确定后台发生了什么,但可能的罪魁祸首是垃圾收集。

在这种情况下,95% 的准确率还不够好。我将不得不实施某种更正机制,以确保ListView 在这些情况下位于正确的位置。

除了简单地调用view.smoothScrollBy(distance, time);之外,还有更好的方法来使用smoothScrollBy()吗?

【问题讨论】:

  • 你有没有找到一个很好的解决方案?我现在处于完全相同的位置,我只需要对smoothScrollBy() 有 100% 的准确度,但它的实际操作非常不一致。
  • 是的,我最终放弃了 ListView 以使用 ScrollView 获得对位置的更多控制,而只是向其中添加子视图。在我弄清楚这一点之前,我正在使用一种更正机制,以确保它滚动到正确的位置,如果没有,则启动另一个滚动。非常不精确,不适合专业应用:(
  • 非常感谢,Styler。今天我尝试实现一个校正机制,它基本上以迭代方式应用多个滚动,从OnScrollListener() 调用连续滚动(通过Handler)。我很惊讶地说最终的结果非常好。我所做的是使大部分滚动发生得非常快,但最后 500 像素的最终滚动很慢(400 毫秒)。这使得整个卷轴看起来非常流畅和漂亮,就像一个单一的非线性卷轴。我得找点时间整理一个例子,然后在这里贴出来。
  • 那将是一个很好的替代答案..干得好:)
  • 使用此功能developer.android.com/reference/android/view/… 发布操作。不要只在主线程上运行它。

标签: android listview scroll


【解决方案1】:

有时是因为时间问题。视图何时添加到您的列表视图以及您添加的时间

view.smoothScrollBy(distance, time);

列表视图或用户界面仍然不需要刷新。因此,请在具有特定延迟的视图帖子线程中执行此操作。例如。

view.postDelayed(new Runnable{
    view.smoothScrollBy(distance, time);
},1000);

【讨论】:

  • 我认为这不够流畅。这意味着您必须等待 1 秒钟才能启动滚动。这将是我正在使用的应用程序的一个展示停止
  • 1 秒延迟只是一个例子。检查刷新视图需要多长时间,然后添加延迟。它不必是一秒钟。在您的情况下,它甚至可以以毫秒为单位。
  • 这会因手机而异。总体而言,这个答案很老套,无法在生产环境中使用
【解决方案2】:

试试这些:

Listview 有自己的滚动机制。添加内容时它会滚动。

  1. 将列表视图高度 (android:layout_height) 分配给 match_parent 或 fill_parent。

  2. 如果您在工作线程中分配适配器。不要在线程中执行任何 UI 操作。

如果这些都不能解决问题。如果有的话,请发布您将适配器分配给列表视图的代码。或者相关代码。

还有xml布局代码。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多