【问题标题】:When the listitems are scrolled fast, setOnScrollListener is not working当列表项快速滚动时,设置 OnScrollListener 不起作用
【发布时间】:2015-09-01 12:06:23
【问题描述】:

我尝试实现教程中描述的粘性标题列表视图来自

http://javatechig.com/android/listview-header-parallax-with-sticky-view-in-android

问题是当我快速滚动列表时,标题不会按需要移动到屏幕顶部。

我尝试用以下方法记录 topYheroTopY 的值。

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            /* Check if the first item is already reached to top.*/
            if (view.getFirstVisiblePosition() == 0) {
                View firstChild = listView.getChildAt(0);
                topY = 0;
                if (firstChild != null) {
                    topY = firstChild.getTop();
                    Log.d("topY", "" + topY);
                }

                heroTopY = stickyViewSpacer.getTop();
                Log.e("heroTopY", "" + heroTopY);
                Log.d("topY,heroTopY", topY + "," + heroTopY);
                stickyView.setY(Math.max(0, heroTopY + topY));

                // Set the image to scroll half of the amount that of ListView
                heroImageView.setY(topY * 0.5f);
            }
        }

日志输出为:

09-01 17:35:23.692  19530-19530/com.javatechig.parallaxlistview D/topY﹕ 0
09-01 17:35:23.692  19530-19530/com.javatechig.parallaxlistview E/heroTopY﹕ 500
09-01 17:35:23.692  19530-19530/com.javatechig.parallaxlistview D/topY,heroTopY﹕ 0,500
09-01 17:35:23.856  19530-19530/com.javatechig.parallaxlistview D/topY﹕ -29
09-01 17:35:23.856  19530-19530/com.javatechig.parallaxlistview E/heroTopY﹕ 500
09-01 17:35:23.856  19530-19530/com.javatechig.parallaxlistview D/topY,heroTopY﹕ -29,500
09-01 17:35:23.873  19530-19530/com.javatechig.parallaxlistview D/topY﹕ -72
09-01 17:35:23.873  19530-19530/com.javatechig.parallaxlistview E/heroTopY﹕ 500
09-01 17:35:23.873  19530-19530/com.javatechig.parallaxlistview D/topY,heroTopY﹕ -72,500
09-01 17:35:23.892  19530-19530/com.javatechig.parallaxlistview D/topY﹕ -84
09-01 17:35:23.892  19530-19530/com.javatechig.parallaxlistview E/heroTopY﹕ 500
09-01 17:35:23.892  19530-19530/com.javatechig.parallaxlistview D/topY,heroTopY﹕ -84,500

从日志输出中可以看出,topY 值停留在 84 处,因此标题。 如何解决这个问题?任何解决方案都会有所帮助!!!

【问题讨论】:

  • onScroll开头添加Log.e
  • 使用if (view.getFirstVisiblePosition() == 0){},只有当您到达顶部时,您才会移动您的stickyView,这是您想要的吗?
  • @Rami,先生,这里是视频链接youtu.be/eyWDkwVnYxo。当列表视图的第一项到达屏幕顶部时,我想实现标题 Heading1 粘在顶部,如果滚动缓慢,它可以正常工作。但是如果快速滚动 Heading1 视图不会移到顶部!!

标签: android listview onscrolllistener


【解决方案1】:

添加这些行

if (view.getFirstVisiblePosition() == 0) {
.....
.....
}
else
{
  stickyView.setY(0);
}

这是因为当第一个项目不在视野范围内时,如果语句意味着 topY 没有更新,所以你必须在 else 语句中将你的 stickyView.setY() 设置为 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多