2015-09-01 24 views
3

我試圖從當listItems中的滾動速度快,setOnScrollListener不工作

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值獲得stucked在84等的報頭所示。 enter image description here 如何解決這個??任何解決方案將是有益的!

+0

在'onScroll'的開頭添加'Log.e' – pskink

+0

使用'if(view.getFirstVisiblePosition()== 0){}',只有當您到達頂部時,纔會移動您的'stickyView'你想要什麼? – Rami

+0

@Rami,先生,這裏是視頻https://youtu.be/eyWDkwVnYxo的鏈接。我希望實現標題** Heading1 **作爲listview的第一項到達屏幕頂部時保持頂部,如果滾動緩慢完成,則其工作正常。但如果快速滾動** Heading1 **視圖不會移動到頂部! – Nischal

回答

2

添加這些行

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

這是因爲當第一個項目失控的觀點你不進去if語句意味着沒有更新TOPY所以你有你的stickyView.setY()設置爲0上的其他人聲明。

+0

謝謝它的作品! – Nischal

+0

@Nischal接受答案,如果它幫助你。 –