Android 獲取ListView滾動距離方法

2021-07-09 12:58:37 字數 1291 閱讀 1766

今天想做個導航欄漸變的效果,原來這種效果是通過監聽scrollview的滾動距離實現的。由於首頁較多,而且裡面還巢狀了listview,大家都知道listview巢狀在scrollview中是需要計算高度然後全部顯示出來的,這樣listview中的所有就需要全部載入出來。在做了快取的情況下,進入頁面還是會有明顯的卡頓。這時我就去掉了scrollview,這個頁面只用listview實現。

scrollview滾動距離監控:

scrollview.setscrollviewlistener(new scrollviewlistener() 

});

listview滾動距離監控:在網上找了很多,什麼getscrolly();方法,什麼重寫listview中的onscrollchanged等

這都試過了,基本都不好用。最後終於找到下面的文章:

實現**:

listview.setonscrolllistener(new onscrolllistener() 

@override

public void onscroll(abslistview arg0, int arg1, int arg2, int arg3)

itemrecord.height = firstview.getheight();

itemrecord.top = firstview.gettop();

int h = getscrolly();//滾動距離

}} }

private int getscrolly()

itemrecod itemrecod = (itemrecod) recordsp.get(mcurrentfirstvisibleitem);

if (null == itemrecod)

return height - itemrecod.top;

} class itemrecod

});

二、獲取滾動高度

public int getscrolly() 

int firstvisibleposition = listview.getfirstvisibleposition();

int top = c.gettop();

return -top + firstvisibleposition * c.getheight() ;

}

三、單位時間滾動指定高度

listview.smoothscrollby(h, t);

解決ScrollView巢狀ListView問題

使用linearlayout取代listview 既然listview不能適應scrollview,那就換乙個可以適應scrollview的控制項,幹嘛非要吊死在listview這一棵樹上呢?而linearlayout是最好的選擇。但如果我仍想繼續使用已經定義好的adater呢?我們只需要自定義乙個...

ScrollView巢狀多個ListView

要解決的問題 1 listview在scrollview中不能完全顯示,只能顯示乙個item。預設情況下,android是不支援在scrollview中巢狀listview,因為listview的高度是不確定,會隨著item的高度和item的數量改變。2 焦點問題,如果把listview顯示的項數固...

React Native控制項之Listview

listview元件用於顯示乙個垂直的滾動列表,其中的元素之間結構近似而僅資料不同。listview更適於長列表資料,且元素個數可以增刪。和scrollview不同的是,listview並不立即渲染所有元素,而是優先渲染螢幕上可見的元素。listview元件必須的兩個屬性是datasource和re...