准确判断listview上下滚动

项目碰到一个需要根据listview上下滚动显示/隐藏tab的问题,挺常见的一个需求,想网上copy一个代码直接用缺发现大部分的实现都不准确。

比如用OnScrollListener里的第一个可见项的index来判断,如果item比较大,滚动了半天还没滚出这个item呢?

所以干脆自己写了一个,给listview设置OnTouchListener,代码如下。关键点在于如果按下的时候点击的地方是item里的某个view,listview的ACTION_DOWN可能就不会触发

boolean isTabShow = true;
float downY = 0;
// 拖动listview时,如果点击到的地方是item里的一些view,可能出现ACTION_DOWN触发不了的问题。
// 利用isActionDown,当为false时就触发了ACTION_MOVE,第一个action需要当成ACTION_DOWN处理
boolean isActionDown = false; OnTouchListener onTouchListener = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: isActionDown = true; downY = event.getY(); Use.trace("onTouchListener", "downY:" + downY); break; case MotionEvent.ACTION_MOVE: if (!isActionDown) { // 当为false时就触发了ACTION_MOVE,第一个action需要当成ACTION_DOWN处理 isActionDown = true; downY = event.getY(); Use.trace("onTouchListener", "downY:" + downY + " no action down"); } else { float currentY = event.getY(); Use.trace("onTouchListener", "downY:" + downY + " currentY::" + currentY + " currentY - downY:" + (currentY - downY)); if (currentY - downY < -20 && isTabShow) { // 向下,隐藏 isTabShow = false; Use.trace("onTouchListener", "downY:" + downY + " currentY::" + currentY + " currentY - downY:" + (currentY - downY) + " hide"); } else if (currentY - downY > 20 && !isTabShow) { // 向上,显示 isTabShow = true; Use.trace("onTouchListener", "downY:" + downY + " currentY::" + currentY + " currentY - downY:" + (currentY - downY) + " show"); } } break; case MotionEvent.ACTION_UP: isActionDown = false;// isActionDown重置 break; default: break; } return false; } };

 

转载于:https://www.cnblogs.com/huanciyuan/p/4331755.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值