ListView的滑动监听(二)

本文介绍了ListView的滑动监听方法,包括OnTouchListener和OnScrollListener。OnTouchListener通过ACTION_DOWN, ACTION_MOVE, ACTION_UP事件判断滑动方向,而OnScrollListener的onScrollStateChanged()和onScroll()方法提供了更丰富的滑动状态信息,如SCROLL_STATE_FLING、SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL,可用于判断滑动停止或惯性滑动等。" 56681987,5891101,Huffman编码详解与应用,"['算法', '编码']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.listview的滑动监听方法主要有两个:一个是OnTouchListener,另一个是OnScrollListener来实现监听。

2.OnTouchListener

OnTouchListener是view中的监听事件,通过监听ACTION_DOWN,ACTION_MOVE,ACTON_UP这三个事件发生时的坐标,就可以根据坐标判断用户滑动的方向,并在不同的事件中进行相应的逻辑处理。

listView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        // 点击时的逻辑
                        break;
                    case MotionEvent.ACTION_MOVE:
                        // 手势移动时的逻辑处理
                        break;
                    case MotionEvent.ACTION_UP:
                        // 手指抬起时的逻辑处理
                        break;
                }
                return false;
            }
        });

3.OnScrollListener

OnScrollListener是AbsListView中的监听事件,它封装了许多和listview相关的信息。

    listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            // 滑动状态改变的时候调用
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                switch (scrollState) {
                    case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
                        // 惯性滑动的时候调用
                        Log.e("keke","OnScrollListener.SCROLL_STATE_FLING");
                        break;
                    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
                        // 滑动停止的时候调用
                        Log.e("keke","OnScrollListener.SCROLL_STATE_IDLE");
                        break;
                    case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                        // 正在滑动的时候调用
                        Log.e("keke","OnScrollListener.SCROLL_STATE_TOUCH_SCROLL");
                        break;
                }
            }

            // 滑动的时候会一直调用
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                Log.e("keke","onScroll");
                Log.e("keke","firstVisibleItem:" + firstVisibleItem);
                Log.e("keke","visibleItemCount:" + visibleItemCount);
                Log.e("keke","totalItemCount:" + totalItemCount);
            }
        });

OnScrollListener中有两个回调–onScrollStateChanged()和onScroll()。onScrollStateChanged()方法根据参数scrollState来决定该方法回调的次数,scrollState有以下三种模式:
OnScrollListener.SCROLL_STATE_FLING:手指离开屏幕的时候,listview仍然处于惯性滑动的状态
OnScrollListener.SCROLL_STATE_IDLE:滑动停止的状态
OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:正在滑动的状态

onScroll()方法会在listview滑动的时候一直调用,该方法中的三个参数记录了当前滑动的状态:
firstVisibleItem:当前能看见的第一个item的ID(从0开始)
visibleItemCount:当前能看见的item的总数,当前能看见的item数目并不是所有的item的数量,只是显示了可以看见的一部分。
totalItemCount:整个listview要显示的item的数目
通过以上的几个参数可以判断是否滑动了最后一个item,亦即
 if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {
                    // 滑动了最后一行
                }

还可以判断滑动的方向:

if (firstVisibleItem > lastVisiblItemPosition) {
                    // 上滑

                }else if (firstVisibleItem < lastVisiblItemPosition) {
                    // 下滑
                }

 lastVisiblItemPosition = firstVisibleItem;

其中lastVisiblItemPosition 表示的是记录的是上一次第一个可视的item的ID,并且与当前可视的ditem的ID进行比较,即可知道当前的滚动的方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值