在 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 触发多次,其他事件在整个过程中只会触发一次





更多相关文章

  1. 2011.06.08——— android 1.6 launcher研究之launcher的左右滑
  2. Android(安卓)Listview 隐藏滚动条
  3. Android设置“android:clickable="false"无效。点击事件依旧触发
  4. Android触摸事件的分发、拦截、处理
  5. Android(安卓)ScrollView嵌套ScrollView滚动的问题解决办法
  6. Android(安卓)高工面试必考题(二):Android的事件分发机制设计与实现
  7. 对于android触摸事件模型的一些理解
  8. Android高手进阶教程(二十三)之---Android中的日历读写操作!!!
  9. 跟着Innost理解下Android输入系统

随机推荐

  1. Demo:选择屏幕写页签
  2. OO ALV常用功能完整简例(热键单击,双击,帮
  3. SAP盘点:创建盘点凭证BAPI_MATPHYSINV_CRE
  4. SE75 采购申请创建抬头文本
  5. (BADI)Copy PR header text to PO header w
  6. Submit report 很实用FM:RS_REFRESH_FROM_
  7. 修改盘点数量MI04过账
  8. Dialog屏幕调用选择屏幕
  9. 创建采购申请(BAPI_REQUISITION_CREATE /
  10. (EXIT)Copy PR header text to PO header w