Android ListView监听上滑、下滑、滑到顶部/底部

本文介绍了在Android中如何监听ListView的上滑、下滑以及滑动到顶部和底部的两种方法:通过设置setOnScrollListener和setOnTouchListener来实现。

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

监听上下滑有两种方法:

      

1.用ListView的setOnScrollListener方法


//Activity中的初始化
 private int lastVisibleItemPosition = 0;// 标记上次滑动位置,初始化默认为0
 private boolean scrollFlag = false;// 标记是否滑动


//设置方法
actualListView.setOnScrollListener(new AbsListView.OnScrollListener() {


            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

                 //判断状态
                switch (scrollState) {
                    // 当不滚动时
                    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 是当屏幕停止滚动时
                        scrollFlag = false;
                        // 判断滚动到底部 、position是从0开始算起的
                        if (actualListView.getLastVisiblePosition() == (actualListView
                                .getCount() - 1)) {

                            //TODO

                        }
                        // 判断滚动到顶部
                        if (actualListView.getFirstVisiblePosition() == 0) {

                            //TODO
                        }

                        break;
                    case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 滚动时
                        scrollFlag = true;
                        break;
                    case AbsListView.OnScrollListener.SCROLL_STATE_FLING: 
                         // 当用户由于之前划动屏幕并抬起手指,屏幕产生惯性滑动时,即滚动时
                                   scrollFlag = true;
                        break;
                }
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

              //当滑动时
                if (scrollFlag
                     ) {
                    if (firstVisibleItem < lastVisibleItemPosition) {
                        // 上滑
                       //TODO
                    } else if (firstVisibleItem > lastVisibleItemPosition) {
                        // 下滑
                        //TODO
                    } else {
                        return;
                    }
                    lastVisibleItemPosition = firstVisibleItem;//更新位置

                }

            }
        });



2.用ListView的setOnTouchListener方法


//activity中的初始化
 private int mTouchSlop;
    private float mFirstY;
    private float mCurrentY;
    private int direction;
    private boolean mShow = true;


//触发移动事件的最短距离
 mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();



//具体方法
 actualListView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        mFirstY = event.getY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        mCurrentY = event.getY();
                        if (mCurrentY - mFirstY > mTouchSlop) {
                            direction = 0;// down
                        } else if (mFirstY - mCurrentY > mTouchSlop) {
                            direction = 1;// up
                        }
                        if (direction == 1) {
                            
                                //上滑todo
                               
                            
                        } else if (direction == 0) {
                         
                               //下滑todo

                            

                            
                        }
                        break;
                    case MotionEvent.ACTION_UP:
                        break;

                }
                return false;
            }
        });




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值