Android--判断listview上下滑动的方法

本文介绍了一种在Android应用中实现ListView滑动监听的具体方法。通过设置OnScrollListener,能够精确地判断用户滑动方向,并根据不同的滑动状态显示或隐藏特定布局。此方法对于改善用户体验、增加交互性具有重要作用。

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

 1         elv_music_res_fragment.setOnScrollListener(new AbsListView.OnScrollListener() {
 2             private int mLastFirstPostion = 0;
 3             private int mLastFirstTop = 0;
 4             private int touchSlop = ViewConfiguration.get(getActivity()).getScaledTouchSlop();
 5 
 6             @Override
 7             public void onScrollStateChanged(AbsListView view, int scrollState) {
 8 
 9             }
10 
11             @Override
12             public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
13                 int currentTop;
14 
15                 View firstChildView = absListView.getChildAt(0);
16                 if (firstChildView != null) {
17                     currentTop = absListView.getChildAt(0).getTop();
18                 } else {
19                     //ListView初始化的时候会回调onScroll方法,此时getChildAt(0)仍是为空的
20                     return;
21                 }
22                 //判断上次可见的第一个位置和这次可见的第一个位置
23                 if (firstVisibleItem != mLastFirstPostion) {
24                     //不是同一个位置
25                     if (firstVisibleItem > mLastFirstPostion) {
26                         //
27                         if (rg_container_resFragment.getVisibility() != View.GONE) {
28                             rg_container_resFragment.setVisibility(View.GONE);
29                         }
30                     } else {
31                         //
32                         if (rg_container_resFragment.getVisibility() != View.VISIBLE) {
33                             rg_container_resFragment.setVisibility(View.VISIBLE);
34                         }
35                     }
36                     mLastFirstTop = currentTop;
37                 } else {
38                     //是同一个位置
39                     if (Math.abs(currentTop - mLastFirstTop) > touchSlop) {
40                         //避免动作执行太频繁或误触,加入touchSlop判断,具体值可进行调整
41                         if (currentTop > mLastFirstTop) {
42                             //
43                             if (rg_container_resFragment.getVisibility() != View.VISIBLE) {
44                                 rg_container_resFragment.setVisibility(View.VISIBLE);
45                             }
46                         } else if (currentTop < mLastFirstTop) {
47                             //
48                             if (rg_container_resFragment.getVisibility() != View.GONE) {
49                                 rg_container_resFragment.setVisibility(View.GONE);
50                             }
51                         }
52                         mLastFirstTop = currentTop;
53                     }
54                 }
55                 mLastFirstPostion = firstVisibleItem;
56             }
57         });

 

转载于:https://www.cnblogs.com/819158327fan/p/6380836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值