`
ch_kexin
  • 浏览: 897737 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

获取ListView当前滚动的距离(高度)

 
阅读更多

编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!

原本以为ListView的OnScrollListener中onScroll方法可以得出ListView的滚动高度,

  1. publicvoid onScroll(AbsListView view,int firstVisibleItem,
  2. int visibleItemCount,int totalItemCount){

第一个参数AbsListView有getScrollY方法,以为这个getScrollY的值就是ListView的滑动高度了,但是经过测试getScrollY得到的值一直是0。

后来看了网上的一些资料,才知道ListView没有提供得到滚动高度的任何方法,必须自己根据getChildAt(0).topgetFirstVisiblePosition()来综合计算获得。

代码如下:

 

  1. publicint getScrollY(){
  2. View c = mListView.getChildAt(0);
  3. if(c ==null){
  4. return0;
  5. }
  6. int firstVisiblePosition = mListView.getFirstVisiblePosition();
  7. int top = c.getTop();
  8. return-top + firstVisiblePosition * c.getHeight();
  9. }

其原理是假设每个item的高度是一定的(多数情况下的确如此),那么只要知道当前在第几个item,就可以计算出总的高度,因为第一个可见item的一部分可能已经移出了边界,所以再通过mListView.getChildAt(0)获得第一个子view,使用getTop()方法计算出这个偏差。综合起来就可以计算出当前ListView的滚动高度。

虽然上面的方法只是适用于listView 的每个子项高度一定的情况,不过已经解决了大多数问题了。

分享到:
评论

相关推荐

    监听listview垂直滚动距离

    "监听listview垂直滚动距离"是Android开发中的一个常见需求,它可以帮助开发者实现诸如无限滚动加载、顶部悬浮按钮(如“返回顶部”)等功能。下面将详细解释如何实现这个功能。 首先,我们需要了解ListView的基本...

    listview 顶部view联动效果

    在`onScroll`方法中,我们可以获取当前的滚动状态、滚动距离等信息,然后根据这些信息更新头部视图的属性,比如大小、颜色、透明度等。 标签中的"动画"指出,这种效果不仅仅是视图位置的改变,还可能包含视图的平滑...

    ListView/ScrollView的header或footer,当向下滚动时消失,向上滚动时出现

    通过比较当前滚动距离和header的高度,你可以判断header是否应该隐藏或显示。 3. **改变header的透明度或高度**: 当`scrollY`超过header的高度时,你可以逐渐降低header的透明度,让它看起来像是“消失”。反之,...

    listview滑动显示隐藏头部

    3. **计算滚动距离**:根据滚动方向(滚动速度和距离)来决定头部视图的显示或隐藏。如果用户向下滑动,头部视图的高度会被逐渐减小;反之,如果用户上滑,头部视图的高度会增加。 4. **设置动画效果**:为了使头部...

    ListView上拉隐藏头布局 下拉显示

    在`onScroll()`方法中,我们可以获取当前滚动状态(SCROLL_STATE_IDLE, SCROLL_STATE_TOUCH_SCROLL, SCROLL_STATE_FLING)以及滚动的距离。 4. **自定义滚动逻辑**: 当用户下拉时,逐渐显示Header View;当用户上拉...

    ListView中的点击事件注意及分页的功能

    3. 在滚动事件中判断是否达到加载下一页的条件,比如:当前页数+1等于总页数或者距离底部只有一定数量的item。 4. 加载新数据后,更新数据源,并在UI线程中刷新ListView。 5. 如果使用异步加载,需要注意避免重复...

    ListView上下滑动顶部控件动画隐藏和显示

    在onScroll()方法中,我们可以获取当前滚动的距离,以此作为动画的触发条件。 ```java listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged...

    android ListView向上滑动隐藏标题,下拉显示标题栏,完美解决滑动出现的空白问题。

    3. **调整标题栏**:在`adjustHeader`方法中,根据滚动距离调整标题栏的高度或透明度。如果使用动画,可以通过ValueAnimator来平滑地改变属性。 ```java private void adjustHeader(int scrollY) { // 根据scrollY...

    网页仿androidListview

    4. **动态加载**:在JavaScript中,可以设定一个阈值,当滚动距离到达这个阈值时,发送请求获取新的数据。通常,这个阈值是页面可见区域距离底部的距离,与列表的总高度进行比较。 5. **动画效果**:为了增加用户...

    ListView保持在列表的顶部固定View 案例分析 源码.rar

    这通常涉及到测量View的高度和ListView的滚动距离。如果偏移量大于0,说明固定View已经部分或完全滑出屏幕,需要将其设置为固定在顶部。 5. **设置固定View**: 使用`addHeaderView`或`setHeaderView`方法添加或更新...

    ListView保持在列表的顶部固定View 案例分析 源码毕业设计—(包含完整源码可运行).zip

    4. **处理滚动**:在`onScroll`方法中,获取第一个可见条目的位置和高度,判断是否需要进行滚动偏移。如果需要,通过`setSelectionFromTop`或`smoothScrollBy`方法调整ListView的滚动位置。 5. **优化性能**:注意...

    listview_scrollview动态改变Headview

    // 获取当前滑动的Y轴距离 // 根据滑动距离计算透明度 float alpha = (float) Math.min(Math.abs(scrollY), headerHeight) / headerHeight; header.setAlpha(alpha); // 设置Headerview的透明度 } } }); ``` ...

    Android ListView下拉刷新 Demo.zip

    这种设计提高了用户体验,让用户无需离开当前界面就能获取最新的信息。 在Android中,实现ListView的下拉刷新功能通常有两种方式: 1. 使用SwipeRefreshLayout:这是Android SDK提供的一种内置组件,可以直接包裹...

    ListView+SlideBar实现城市快速索引源码

    在SlideBar的点击事件监听器中,根据点击的字母获取对应的索引,然后调用ListView的`setSelectionFromTop(int position, int y)`方法,传入对应城市列表项的位置和距离顶部的高度,使ListView滚动到正确位置。...

    ListviewTest

    我们可以在此时获取ListView的高度和可见高度(屏幕高度减去软键盘高度),然后根据这两者计算出需要滚动的距离,最后调用`ListView.smoothScrollToPosition(int position)`方法来平滑滚动到指定位置,通常是数据集...

    Android ListView向上滑动隐藏标题,下拉显示标题栏,完美解决滑动出现的空白问题

    当用户滑动ListView时,会触发`onScroll()`方法,通过这个方法我们可以获取当前的滚动状态和位置。 2. **隐藏与显示标题栏**:在监听到滑动事件后,我们需要判断滑动的方向。如果用户上滑,我们就隐藏标题栏;如果...

    自定义ListView下拉刷新

    我们需要添加一些额外的属性,如当前是否正在刷新、Header的高度等。同时,还需要重写`onScroll`和`onTouchEvent`方法,以便监听滚动事件和触摸事件。 ```java public class PullToRefreshListView extends ...

    Android中判断listview是否滑动到顶部和底部的实现方法

    然后,我们获取第一个item的View,并检查其顶部距离ListView顶部的距离是否为0。如果为0,说明已经滑动到顶部,可以进行下拉刷新操作。 ```java if (firstVisibleItem == 0) { View first_view = lsv_new_house....

    反弹效果码

    在`onScroll()`方法中,我们需要获取ListView的滚动状态(SCROLL_STATE_IDLE、SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING),以及当前滚动的顶部位置(firstVisibleItem)和可见视图的数量(visibleItemCount)...

Global site tag (gtag.js) - Google Analytics