谢耀眼 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 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题