手机控制电脑之手机端模拟鼠标移动

  最近做了一个手机通过wifi控制电脑的小demo,其中进行鼠标移动控制的时候,出现了一些小bug,这里记录一下正确的移动方法,第一个方法也是最容易想到的,就是自己通过记忆上一次鼠标位置,计算距离偏差,代码如下:

                int x= (int) event.getX();
                int y= (int) event.getY();
                int distantX=0;
                int distantY=0;
                synchronized (msgInfo){
                    switch (event.getAction()){
                        case MotionEvent.ACTION_DOWN:
                            msgInfo.setX(x);
                            msgInfo.setY(y);
                            msgInfo.setEventType(MsgInfo.MOUSE_MOVED);
                            msgInfo.setId(MsgInfo.ID_MOUSE);
                            oldx=x;
                            oldy=y;
                            msgInfo.setX(0);
                            msgInfo.setY(0);
                            //发送按下指令
                            break;
                        case MotionEvent.ACTION_MOVE:
                            msgInfo.setX(x);
                            msgInfo.setY(y);
                            ++flag;
                            if (flag==1){
                                oldx=x;
                                oldy=y;
                            }
                            distantX=x-oldx;
                            distantY=y-oldy;
                            oldx=x;
                            oldy=y;
                            msgInfo.setX(distantX);
                            msgInfo.setY(distantY);
                            //发送移动指令
                            break;
                        case MotionEvent.ACTION_UP:
                            msgInfo.setX(x);
                            msgInfo.setY(y);
                            flag=0;
                            distantX=x-oldx;
                            distantY=y-oldy;
                            oldx=x;
                            oldy=y;
                            msgInfo.setX(distantX);
                            msgInfo.setY(distantY);
                            //发送抬起指令
                            break;
                    }

    但是实际上android给我们提供了更方便的法,那就是利用GestureDetector,也就android的手势识别,他提供了scroll方法帮我们计算滑动的距离,实现起来非常简单。所以第二个方法代码量不多,贴代码:


 final  GestureDetector detector=new GestureDetector(this,new GestureDetector.SimpleOnGestureListener(){
            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                synchronized (msgInfo){
                    msgInfo.setX((-(int)distanceX)*mouseDpi);//转化为相反数,否则方向相反
                    msgInfo.setY((-(int)distanceY)*mouseDpi);
                    msgInfo.setEventType(MsgInfo.MOUSE_MOVED);
                    msgInfo.setId(MsgInfo.ID_MOUSE);
                    Log.i("TAG", "onScroll: "+distanceX+","+distanceY);
                    Log.i("TAG", "e1: "+e1.getPointerCount()+",e2:"+e2.getPointerCount());
                    if (e2.getPointerCount()==2){
                        if (distanceY>0){
                            msgInfo.setEventType(MsgInfo.WHEEL_DOWN_PRESSED);
                        }else {
                            msgInfo.setEventType(MsgInfo.WHEEL_UP_PRESSED);
                        }
                    }

                }
                return true;
            }
        });
detector.onTouchEvent(event);//在监听函数onTouch里添加这句,替换掉原来的监听事件,最后记得返回true
注:1.msgInfo为需要通过socket发送的数据的包装

      2.方法二后面的判断语句是为了判断多点触摸,然后模拟鼠标滚轮滑动

你可能感兴趣的:(Android解决方案集,GestureDetector,手势识别,手机控制电脑,鼠标)