Android-setOnScrollListener(new OnScrollListener() {});

【一】最近在项目终于到一个这样的问题:listview控件需要监听向上、向下滑动。然后同时产生联动效果,屏幕上方(listview在下方)的一个ScrollView就会执行左、右滑动。

对于我本人的技术来说,确实想想都蛋疼啊。尝试了三种方法,算是找到了一个符合项目的解决办法。下面我说一下我对listvew如何判定向上、向下滑动的个人经验。


【二】很多人会说,监听listview可以不用setOnScrollListener(new OnScrollListener() {}); 确实是这样的,用onTouch那个其实也很快。只不过就是因为项目的需要,我只能寻求使用setOnScrollListener(new OnScrollListener() {});来监听了。以下是主体代码

注意事项:scrollFlag 和 fing 是boolean类型的变量,可以声明为全局变量。自己加上去吧

listview.setOnScrollListener(new OnScrollListener() {
	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
	switch (scrollState) {
		case OnScrollListener.SCROLL_STATE_IDLE://滑动停止
		scrollFlag = false;
		break;

<span style="white-space:pre">		</span>case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://正在滑动
<span style="white-space:pre">		</span>scrollFlag = true;
<span style="white-space:pre">		</span>break;

<span style="white-space:pre">		</span>case OnScrollListener.SCROLL_STATE_FLING://快速触摸后产生的滑动
<span style="white-space:pre">		</span>scrollFlag = true;
<span style="white-space:pre">		</span>fing = true;
<span style="white-space:pre">		</span>break;
	}
}
	@Override
	public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {//第一个参数是指这个view,第二个参数是当前的listview中能看到的第一个item的position,哪怕是看到一半也算哦。
<span style="white-space:pre">		</span>//第三个参数是当前界面一共可以看见的item个数
<span style="white-space:pre">		</span>//第四个参数是 listview中所有item的个数
<span style="white-space:pre">	</span>}


【三】到这里,这个是listvew.setvOnScrollListener方法中的两个需要重写的方法。第一个方法中的switch语句是用来判断用户的触摸事件。

至于为什么在触摸后滑动中又加了一个boolean变量,这个请看接下来的代码。在第二个重写方法中的内容为

注意事项:lastVisibleItemPosition 是一个Int类型的变量,记得声明一下

<span style="white-space:pre">			</span>int firstVisiblePosition = listview.getFirstVisiblePosition();
					
					
				if(scrollFlag == true && fing == false){
						
					if(firstVisibleItem > lastVisibleItemPosition  || firstVisibleItem-lastVisibleItemPosition == 1){
						//Log.i("TAG","向上滑动");

					}else if(firstVisibleItem < lastVisibleItemPosition || lastVisibleItemPosition -firstVisibleItem == 1){
						//Log.i("TAG","向下滑动");
								
								
					}else {
						return;
					}
		
							
					lastVisibleItemPosition = firstVisibleItem;
				}else if(scrollFlag == true && fing == true){
				
				}


【四】至于判断条件中的 firstVisibleItem - lastVisibleItemPosition == 1 (以及下面的也是),这个条件可以要,可以不要。为的是能精确的判断而已;另外fling的代码需要两个boolean 变量都为true的时候执行;最后呢,大家可以参考样式,将自己想要之行的代码或者要做的思路,应用在合适的位置尝试一下吧。谢谢大家,如有不足请指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值