首页 > 其他 > 详细

准确判断listview上下滚动

时间:2015-03-12 11:25:07      阅读:285      评论:0      收藏:0      [点我收藏+]

项目碰到一个需要根据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; } };

 

准确判断listview上下滚动

原文:http://www.cnblogs.com/huanciyuan/p/4331755.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!