开发者社区> 问答> 正文

setOnTouchListener监听器的问题

代码中的左右滑动可以被监听到,上下滑动却监听不到,求大神们指点,代码如下:

 
private void initGameView() {
        setOnTouchListener(new View.OnTouchListener() {
            private float startX, startY, offsetX, offsetY;
 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startX = event.getX();
                    startY = event.getY();
                    break;
                case MotionEvent.ACTION_UP:
                    offsetX = event.getX() - startX;
                    offsetY = event.getY() - startY;
 
                    if (Math.abs(offsetX) > Math.abs(offsetY)) {
                        if (offsetX < -5) {
                            System.out.println("left");
                        } else if (offsetX > 5) {
                            System.out.println("right");
                        } 
                        else {
                            if (offsetY < -5) {
                                System.out.println("up");
                            } else if (offsetY > 5) {
                                System.out.println("down");
                            }
                        }
                         
                    }
                    break;
                }
                return true;
 
                 
 
            }
 

展开
收起
爵霸 2016-06-06 10:48:20 2053 0
1 条回答
写回答
取消 提交回答
  • 实际情况下,上下滑动肯定不可能是完全垂直的,偏差个几十像素都有可能,你这个左右像素就限制一个5像素,肯定会屏蔽掉上下滑动的呀。

    这种情况你要根据offsetX 和 offsetY 中绝对值较大的那个先来判断左右还是上下,不能先就在左右里看,如果某个手势 offsetX 是10 而 offsetY 是 100,明显这个动作是下滑,而你的程序就会识别成右滑。

    2019-07-17 19:27:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载