博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
准确判断listview上下滚动
阅读量:4671 次
发布时间:2019-06-09

本文共 2420 字,大约阅读时间需要 8 分钟。

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

你可能感兴趣的文章
nlog自定义文件名
查看>>
java环境变量配置
查看>>
Mysql中文乱码问题解决
查看>>
make clean指令出现问题
查看>>
巴中故里
查看>>
Docker(一):Docker入门
查看>>
异常检测(Anomaly detection): 异常检测算法(应用高斯分布)
查看>>
6、easyUI-拖放事件及应用
查看>>
Shell脚本学习-数组
查看>>
2015年传智播客JavaEE 第168期就业班视频教程day38-SSH综合案例-1
查看>>
day18-事务与连接池 1.复习
查看>>
[原]从一个链接错误探究GCC的链接库顺序
查看>>
PHP面向对象:instanceof 运算符 (备忘)
查看>>
数据存储-CoreData总结
查看>>
通过Ajax的方式执行GP服务
查看>>
Ztree加载完成后显示勾选节点
查看>>
HDU 3401
查看>>
asp.net中XmlDocument解析出现出错,处理特殊字符
查看>>
unable to locate package gparted
查看>>
Centos7安装Mysql
查看>>