Android - 回到顶部实现

本文详细介绍了如何在Android中为ScrollView和ListView实现返回顶部功能。通过设置Touch监听事件和OnScrollListener,监测滑动距离并在适当时候显示返回顶部按钮。点击按钮时,ScrollView和ListView将滚动到顶部,同时隐藏该按钮。

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

实现思路 - ScrollView

  1. 设置ScrollView的Touch监听事件的,获取滑动距离
  2. 当它滑出一定距离后,我们才显示回到顶部按钮
  3. 点击回到顶部按钮,ScrollView、ListVie 滑到顶部
  4. 隐藏回到顶部按钮。
  5. 以上步骤进入循环

实现代码 - ScrollView

  • Xml 布局文件编写回到顶部按钮并设置为Invisiable

  • 设置ScrollView 的Touch监听

//设置ScrollView OnTouch监听
                mScrollView.setOnTouchListener ( new View.OnTouchListener ( ) {
                        private int lastY = 0;
                        private int touchEventId = - 9983761;
                        Handler handler = new Handler ( ) {
                                @Override
                                public void handleMessage ( Message msg ) {
                                        super.handleMessage ( msg );
                                        View scroller = ( View ) msg.obj;
                                        if ( msg.what == touchEventId ) {
                                                if ( lastY == scroller.getScrollY ( ) ) {
                                                        handleStop ( scroller );
                                                } else {
                                                        handler.sendMessageDelayed ( handler.obtainMessage (
                                                                touchEventId, scroller ), 5 );
                                                        lastY = scroller.getScrollY ( );
                                                }
                                        }
                                }
                        };

                        public boolean onTouch ( View v, MotionEvent event ) {
                                //触摸后-手抬起
                                if ( event.getAction ( ) == MotionEvent.ACTION_UP ) {
                                        handler.sendMessageDelayed (
                                                handler.obtainMessage ( touchEventId, v ), 5 );
                                }
                                return false;
                        }

                        /**
                         * ScrollView 停止
                         */
                        private void handleStop ( Object view ) {
                                ScrollView scroller = ( ScrollView ) view;
                                scrollY = scroller.getScrollY ( );

                                // 底部判断
                                if ( mContent != null
                                        && mContent.getMeasuredHeight ( ) <= mScrollView.getScrollY ( )
                                        + mScrollView.getHeight ( ) ) {
                                        mGoTop.setVisibility ( View.VISIBLE );
                                }
                                // 顶部判断
                                else if ( mScrollView.getScrollY ( ) == 0 ) { }
                                //滑出顶部30
                                else if ( mScrollView.getScrollY ( ) > 30 ) {
                                        mGoTop.setVisibility ( View.VISIBLE );
                                }
                        }
                } );
  • 监听 回到顶部按钮的点击事件
@OnClick ( R.id.home_to_top  )
        public void clickEvent ( View view ) {
                switch ( view.getId ( ) ) {
                        case R.id.home_to_top:
                                mScrollView.post ( new Runnable ( ) {
                                        @Override
                                        public void run ( ) {
                                                mScrollView.fullScroll ( ScrollView.FOCUS_UP );
                                        }
                                } );
                                mGoTop.setVisibility ( View.INVISIBLE );
                                break;

                }
        }

实现思路 - ListView

  1. 设置ListView的OnScrollListener
  2. ListView的firstVisibleItem!=0,我们显示回到顶部按钮
  3. 点击回到顶部按钮,ListView 滑到第一项
  4. 隐藏回到顶部按钮。
  5. 以上步骤进入循环

实现代码 - ListView

  • Xml 布局文件编写ListView的回到顶部按钮并设置为Invisiable

  • 设置ListView的OnScrollListener

 mListView.setOnScrollListener(new OnScrollListener() {

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

                /**
                 * firstVisibleItem:当前能看见的第一个列表项ID(从0开始)
                 * visibleItemCount:当前能看见的列表项个数(小半个也算) totalItemCount:列表项共数
                 */
                @Override
                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

                                if (firstVisibleItem !=0) {
                                        toTopBtn.setVisibility(View.VISIBLE);
                                } else {
                                        toTopBtn.setVisibility(View.GONE);
                                }
                        }
                }
        });
        /**
         * 滚动ListView到指定位置
         *
         */
        private void setListViewPos(int pos) {
                if (android.os.Build.VERSION.SDK_INT >= 8) {
                         listView.smoothScrollToPosition(pos);
                } else {
                          listView.setSelection(pos);
                      }
                }

  • 监听 回到顶部按钮的点击事件
@OnClick ( R.id.home_to_top  )
public void onClick(View v) {
     switch (v.getId()) {
             case R.id.top_btn:// 点击按钮返回到ListView的第一项
                   setListViewPos(0);
             break;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值