有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用motionevents模拟鼠标单击

我试图模拟当应用程序中的鼠标垫被按下而未移动时的鼠标点击

  if(isConnected && out!=null){
                switch(event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        //save X and Y positions when user touches the TextView
                        initX =event.getX();
                        initY =event.getY();
                        mouseMoved=false;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        disX = event.getX()- initX; //Mouse movement in x direction
                        disY = event.getY()- initY; //Mouse movement in y direction
                        /*set init to new position so that continuous mouse movement
                        is captured*/
                        initX = event.getX();
                        initY = event.getY();
                        if(disX !=0|| disY !=0){
                            out.println(disX +","+ disY); //send mouse movement to server
                        }
                        mouseMoved=true;
                        break;
                    case MotionEvent.ACTION_UP:
                        //consider a tap only if usr did not move mouse after ACTION_DOWN
                        if(!mouseMoved){
                               out.println(Constants.MOUSE_LEFT_CLICK);
                        }
                }
            }
            return true;
        }
    });
}

我试过这个,但我不明白为什么它不起作用。每次我点击鼠标垫,鼠标就会移动。我怎样才能解决这个问题


共 (2) 个答案

  1. # 1 楼答案

    if-else试一下,先按一下,然后在else中移动

  2. # 2 楼答案

    我通过设置一个余量来解决我的问题

    int max = 2 
    int min = -2
    case MotionEvent.ACTION_UP:
                            //consider a tap only if usr did not move mouse after ACTION_DOWN
                            if(disX <= max && disX >= min && disY <= max && disY >= min){
                                out.println(Constants.MOUSE_LEFT_CLICK);
                                mouseMoved=false;
                                break;
                            }
                    }
                }
                return true;
            }