当列表项快速滚动时,setOnScrollListener无效

时间:2015-09-01 12:06:23

标签: android listview onscrolllistener

我尝试实现

中教程中描述的粘性标题列表视图

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

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

我尝试在以下方法中记录 topY heroTopY 的值。

        @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,所以标题。 enter image description here 如何解决这个问题?任何解决方案都会有所帮助!!!

1 个答案:

答案 0 :(得分:1)

添加这些行

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

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