zoukankan      html  css  js  c++  java
  • ListView中的setOnScrollListener

    ListView是Android中最常用的控件之一,随着时代发展,RecyclerView有取代它的趋势,但是在一些老代码中,ListView依然扮演着重要的作用。
    项目中遇到一个需求,需要监听ListView在滑动时滑动的Y轴坐标。这个需求在RecyclerView中computeVerticalScrollOffset方法完成了这项功能。只需要在OnScrollListener的onScrolled方法中,调用computeVerticalScrollOffset即可在滑动时获得Y坐标。
    然而,在ListView中,这个实现却没有这么方便。
    在ListView中,setOnScrollListener(new AbsListView.OnScrollListener(),可以获得以下两个方法:
    1)public void onScrollStateChanged(AbsListView view, int scrollState)
    2)public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

    方法1 监听着ListView的滑动状态改变。官方的有三种状态SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING、SCROLL_STATE_IDLE:

    SCROLL_STATE_TOUCH_SCROLL:手指正拖着ListView滑动

    SCROLL_STATE_FLING:ListView正自由滑动

    SCROLL_STATE_IDLE:ListView滑动后静止

    方法2 监听滑动:

    firstVisibleItem:第一个可见项是ListView的第几项

    visibleItemCount:可见项的总数

    totalItemCount:总项数

    可见,在ListView中,我们是没有获得滑动Y坐标的方法的。但是我们有firstVisibleItem,由它可以知道我们已经滑走了多少个item,然后逐一测出它们的高度就可以得知总共滑走的Y值是多少了。

      Dictionary<Integer, Integer> listViewItemHeights = new Hashtable<Integer, Integer>();       
       contentListView.setOnScrollListener(new AbsListView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(AbsListView view, int scrollState) {
    
                }
    
                @Override
                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    
    
                    View c = view.getChildAt(0); //this is the first visible row
                    if (c != null) {
                        int scrollY = -c.getTop();
                        listViewItemHeights.put(view.getFirstVisiblePosition(), c.getHeight());
                        for (int i = 0; i < view.getFirstVisiblePosition(); ++i) {
                            if (listViewItemHeights.get(i) != null) // (this is a sanity check)
                                scrollY += listViewItemHeights.get(i); //add all heights of the views that are gone
    
                        }
                        Log.d("tag", "the scrollY of the listview is==========" + scrollY);
                    }
    
                }
            });

      其中scrollY就是滑动的Y值。

  • 相关阅读:
    APP手工测试01-app专项测试要点-测试、开发环境-敏捷开发
    APP测试面试题(一)
    软件测试面试题-网站
    APP 抓包-fiddler
    使用模板快速编写测试用例
    随机数据构造-Faker
    [转载]大规模爬虫流程总结,经验总结
    python高级知识点总结
    python sorted,sort,reversed,reverse函数
    python函数式编程
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4647046.html
Copyright © 2011-2022 走看看