手机控制电脑之手机端模拟鼠标滑动处理

    最近做了一个手机通过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.方法二后面的判断语句是为了判断多点触摸,然后模拟鼠标滚轮滑动



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Playwright 模拟鼠标滑动可以使用 `mouse.move()` 方法来移动鼠标,并且可以使用 `mouse.down()` 方法模拟鼠标按下事件,再使用 `mouse.up()` 方法模拟鼠标松开事件。示例如下: ```javascript const { chromium } = require('playwright'); (async () => { const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); const slider = await page.$('#slider'); // 获取需要滑动的元素 const sliderHandle = await slider.$('.handle'); // 获取滑块 const sliderBoundingBox = await slider.boundingBox(); const sliderHandleBoundingBox = await sliderHandle.boundingBox(); // 计算滑块中心点位置 const sliderHandleCenterX = sliderHandleBoundingBox.x + (sliderHandleBoundingBox.width / 2); const sliderHandleCenterY = sliderHandleBoundingBox.y + (sliderHandleBoundingBox.height / 2); // 移动鼠标到滑块中心点位置 await page.mouse.move(sliderHandleCenterX, sliderHandleCenterY); // 模拟鼠标按下事件 await page.mouse.down(); // 模拟鼠标滑动事件,将滑块移动到指定位置 await page.mouse.move(sliderBoundingBox.x + 100, sliderHandleCenterY); // 模拟鼠标松开事件 await page.mouse.up(); await browser.close(); })(); ``` 在上面的示例中,我们首先获取了需要滑动的元素和滑块,并且计算出滑块中心点位置。然后使用 `mouse.move()` 方法鼠标移动到滑块中心点位置,并且使用 `mouse.down()` 方法模拟鼠标按下事件。接着使用 `mouse.move()` 方法将滑块移动到指定位置,最后使用 `mouse.up()` 方法模拟鼠标松开事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值