谢耀眼 2016-07-30 13:32 采纳率: 12.5%
浏览 943

为什么ListView在MOVE中返回true,在Down里面,有时候监听不到Down

这是一个ListView 我重写的onTouchEvent方法,ListView高度小于屏幕高度,当ListView没到顶端的时候 我不让ListView去滑动,当到达顶端才可以滑动,现在的问题是有时候我监听Down事件 监听不到!

@Override
public boolean onTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            parent = mgetParent(this);
            startX = (int) ev.getRawX();
            startY = (int) ev.getRawY();
            Log.d("naobunaoxin", "ListViewDown");

            return true;
        case MotionEvent.ACTION_MOVE:

            if (parent == null) {
                parent = mgetParent(this);
            }

            int moveX = (int) ev.getRawX();
            int moveY = (int) ev.getRawY();
            int distanceX = moveX - startX;
            int distanceY = moveY - startY;

            System.out.println(parent.getTop() + distanceY);
            distance = parent.getTop() + distanceY;

                            //移动到顶端之后才让ListView滑
            if (distance <= 0) {
                Log.d("naobunaoxin", "nimabi");
                parent.layout(0, 0, width, parent.getBottom());
                return super.onTouchEvent(ev);
            }
                            //到达一个固定的值,不让ListView滑动
            if (distance >= countHeight) {

                parent.layout(0, countHeight, width, countHeight + height);
                return true;
            }
            if (this.getFirstVisiblePosition() != 0) {
                Log.d("naobunaoxin", "shousirenle");
                return super.onTouchEvent(ev);
            }
            System.out.println("distanceY = " + distanceX);
            System.out.println("mTouchSlop = " + mTouchSlop);

            parent.layout(0, parent.getTop() + distanceY, width, parent.getBottom() + distanceY);



            startX = (int) ev.getRawX();
            startY = (int) ev.getRawY();
            return true;

        case MotionEvent.ACTION_UP:
            int top = parent.getTop();

            MyApplication application = (MyApplication) activity.getApplication();
            application.setTop(top);
            System.out.println("application.getTop() = " + application.getTop());
            System.out.println("top = " + top);
            System.out.println("mListView.ACTION_UP");
            System.out.println("distance = " + distance);
            if (distance > initHeight) {
                original(initHeight);
                application.setTop(initHeight);
            }
            return true;
    }
    return super.onTouchEvent(ev);
}

    我现在的问题是有的时候我滑来滑去  发现监听不到Down事件,我父类是一个ViewPager,里面什么也没写。
  • 写回答

1条回答

  • Mr.Balloon 2016-07-30 14:35
    关注

    onInterceptTouchEvent 好像是因为这个

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)