• Android 关于 OnScrollListener 事件顺序次数的简要分析


    在 Android 的 OnScrollListener 整个事件我主要分析下他的执行顺序:

    实现滚动事件的监听接口


    new AbsListView.OnScrollListener(){
        @Override
        public void onScrollStateChanged(AbsListView absListView, int scrollState)
        {
            switch (scrollState) {
                case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                    // 手指触屏拉动准备滚动,只触发一次        顺序: 2
                    break;
                case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
                    // 持续滚动开始,只触发一次                顺序: 4
                    break;
                case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
                    // 整个滚动事件结束,只触发一次            顺序: 6
                    break;
                default:
                    break;
            }
        }
    
        @Override
        public void onScroll(AbsListView absListView, int i, int i1, int i2)
        {
            // 一直在滚动中,多次触发                          顺序: 1、3、5
        }
    }


    之前一直很迷糊,后来仔细测试后得出上面的结论


    另外对于 ListView 图片列表的滚动,应该在 

    SCROLL_STATE_FLING   时让图片不显示,提高滚动性能让滚动小姑更平滑

    SCROLL_STATE_IDLE     时显示当前屏幕可见的图片


    对于 onScroll() 接口方法基本上不用他


    之前看文档上的说法,用谷歌翻译出来以为 onScroll 方法是滚动完成后的回调,结果实测是滚动执行中的回调,列表稍滚动一段就要触发几十次

    http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html




    不知是文档没描述对,还是翻译不准确,看他语态过去完成时应该是描述错了吧,感觉应该是  scrolling 才对

    -----------------------------------------------------------------------------------------------------------------------

    补充:

    之前的顺序测试还不够细致,今天偶然测试间发现问题:

    1. 当手指只轻触屏幕不拉动只会触发一次 onScroll 方法,不会触发其他滚动事件

    2. 如果手指触碰屏幕后停滞一下再滑动则首先执行一次 onScroll 方法 然后才是 SCROLL_STATE_TOUCH_SCROLL  事件

    3. 如果手指碰到屏幕后直接滑动则第一次就执行 SCROLL_STATE_TOUCH_SCROLL  事件

    3. 触发 SCROLL_STATE_TOUCH_SCROLL 事件后还会继续多次触发 onScroll 事件,而不是直接触发 SCROLL_STATE_FLING 事件

    4. 滚动后 不一定 会触发  SCROLL_STATE_FLING 事件,可能和手指滑动的距离有关系

    5. 滚动的过程中会多次调用 onScroll 方法

    6. 除了 onScroll 触发多次,其他事件在整个过程中只会触发一次





  • 相关阅读:
    lua判断字符串包含另一个字符串
    expect使用技巧
    Linux expect
    expect正则捕获返回结果
    修改alpine Linux的Docker容器的时区
    Dockerfile镜像优化,减小镜像
    Sed在匹配行前后加入一行
    scp的使用以及cp的对比
    rsync 的用法
    傅里叶系列(一)傅里叶级数的推导 (转)
  • 原文地址:https://www.cnblogs.com/zhouzme/p/5758506.html
Copyright © 2020-2023  润新知