0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于Autojs外部拾取坐标点

汽车电子技术 来源:安卓脚本 作者:稻草人 2023-03-03 14:02 次阅读

对于坐标的操作, 在编写脚本中, 不可避免的会遇到,甚至是取色/截图过程中都需要用到坐标的拾取. 那如果每次都打开指针位置,用起来并不是很方便,在没有root的设备上获取坐标点, 在APP外部是没办法直接来监听屏幕点击事件,但是如果在APP内部则可以监听到用户的点击,那如何既在APP内,又可以操作APP外呢?

答案就是悬浮窗...纯透明,用户不可见的一层悬浮窗,在允许点击悬浮窗的状态下,监听用户的点击和滑动事件, 然后在不允许点击悬浮窗的状态下,转发用户的点击和滑动事件, 这样既监听到了点击,又不影响用户的正常操作.

基础代码:

//auto.waitFor() 注意这个,因为要转发点击事件.所以需要打开无障碍服务,//如果你是低于安卓7.0的用户,则无法使用...auto.waitFor();
var w = floaty.rawWindow( "top" gravity="center" bg="#00000000"/>);
var x_start, y_start, x_end, y_end, time, actionCounts = 1;//悬浮窗全屏, 但不会覆盖到任务栏和导航栏w.setSize(-1, -1);//设置悬浮窗可点, 可点状态下监听用户的点击w.setTouchable(true);
//脚本结束时,关闭悬浮窗events.on("exit", ()=>{ w.close();});
w.top.setOnTouchListener(function(view, event) { switch (event.getAction()) { case event.ACTION_DOWN: //按下事件 w.setTouchable(false); time = new Date(); x_start = event.getRawX(); y_start = event.getRawY(); return true; case event.ACTION_MOVE: //移动事件

return true; case event.ACTION_UP: //抬起事件 swipeTime = new Date() - time; if (Math.abs(event.getRawY() - y_start) > 3 || Math.abs(event.getRawX() - x_start) > 3) { x_end = event.getRawX(); y_end = event.getRawY(); log("滑动坐标: " + x_start + "," + y_start + "---->" + x_end + "," + y_end); threads.start(function () { swipe(x_start, y_start, x_end, y_end, swipeTime); sleep(swipeTime + 100); ui.run(function () { w.setTouchable(true); }); }); } else { log("点击坐标: " + x_start + "," + y_start); threads.start(function () { click(x_start, y_start); ui.run(function () { w.setTouchable(true); }); }) } return true; } return true;});
//保持悬浮窗运行setInterval(()=>{}, 1000)

测试截图如下图的GIF:

图片

如图, 我开启了指针位置. 获取到的坐标和指针位置显示的坐标. 完全一致. 所以这么取点完全没问题.唯一的缺点就是. 动作有滞后性.因为要先监听后转发.所以没法做到实时的操作. 至于各种投屏软件那种实时的滑动原理.我也没有去了解...

因为是最基础的代码. 在此之外我有一些想法和思路分享出来, 在此的基础上,我们是不是可以再做一个悬浮窗.来实时跟踪指针的位置,显示出当前的坐标,当前坐标点的色值, 另外指针滑动抬起时,还可以设置一个询问是否要截图,等等的想法, 如果可以做到点击滑动无延迟是最好的. 有兴趣的就继续深入的研究一下吧.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • APP
    APP
    +关注

    关注

    33

    文章

    1530

    浏览量

    71634
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14637
  • root
    +关注

    关注

    1

    文章

    82

    浏览量

    21237
收藏 人收藏

    评论

    相关推荐

    密度图如何同时输入X、Y坐标及对应的坐标点的Z值。

    如何使用密度图形控件,输入X轴Y轴坐标数据,并输入X、Y轴对应的坐标点数据?求高手解答。急用,可发邮@juxianliyu@163.com。
    发表于 02-25 22:29

    求问各位达人,labview能否实现坐标和其他相关信息的功...

    单独实现、VC与Matlab混合编程,貌似都非常困难。 VC单独实现的时候,很难实现用鼠标点击而取到采样点的坐标的功能。 而用matlab与vc混合的时候,将matlab画图嵌入到VC中
    发表于 04-27 09:36

    并联机器人快速准确拾取物体

    `▼并联机器人迅速将糖豆放入瓶里  仔细观看我们可以发现,相同颜色的糖豆放在一个瓶里  并联机器人这类设备主要用于精密紧凑的应用场合,竞争点集中在速度、重复定位精度和动态性能等方面。  并联机器人快速拾取枕包牛奶,放入指定位置  并联机器人快速准确拾取物体`
    发表于 09-14 11:37

    【MM32 MiniBoard申请】智能垃圾拾取机器人

    申请理由:项目描述:利用开发板所示芯片来控制机械爪,摄像头,红外线,超声波等传感器,来实现智能垃圾拾取
    发表于 11-11 09:26

    labview新手,将鼠标移动的坐标以点簇数组的形式拾取

    具体见图片。就是编到单击可以拾取,但不知道怎么把坐标形成点簇数组。求教各位老师。实在是弄不懂了。
    发表于 11-12 09:11

    请问如何输出波形图中的曲线每一个坐标点

    如图,我想要输出曲线的每一个坐标点(有限的),因为像素是480X640,所以每一点横坐标(X)必然会对应有限的纵坐标(Y),那么该如何输出坐标点然后保存在一个数组中呢?
    发表于 01-25 09:51

    利用CN0385参考电路实现1MHz激励物体表面电压的精确测量,请问应该怎样设计电压拾取(测量)电路呢?

    1MHz下,需要采集的差分信号被淹没在较大共模信号下时,应该怎样设计电压拾取(测量)电路呢?2、怎么改进CN0385这个参考设计,使得能够采集1MHz左右,且可能有较大共模电压的差分信号信号呢? 谢谢!
    发表于 08-14 07:59

    贴片机机器拾取的两种基本模式

      到目前为止,机器拾取的工具和方式仍然与手工拾取相似:机械抓取和真空吸取两种基本模式,只不过机器拾取工具的复杂性和过程的速度是手工无法比拟的。如图1所示。  图1 手工元件拾取的工具
    发表于 09-07 15:18

    webgl三维可视化在线开发实用教程

    {THING.BaseObject} Click.object 当前拾取物体{Array} Click.pickedPosition 获取拾取坐标DBLClick 通知鼠标双击{Number} DBLClick.button
    发表于 12-25 15:26

    拾取停止工作

    我按下USB插座附近的小洞的按钮。认为这是拾取板硬复位。现在拾取停止工作,并列举我们“AT91 USB到串行转换器”。有办法修理吗?
    发表于 03-20 09:41

    (LabVIEW)关于一个计算整体坐标点的问题

    问题如下:目前在做一套分板机(长方形)的设备,即手动设定标准件的运动坐标点,可以保存起来,然后后面每一次放置PCB板的时候无法保证与标准件一致,故用相机拍照后视觉模板匹配取得左上角的点的位置A2
    发表于 04-15 16:52

    CAD坐标标注中如何标注普通坐标

    [输入坐标数值定位标注点(A)]:A 键入选项 A 通过输入坐标值获得坐标点;请输入基准坐标测量坐标值或[图上
    发表于 03-11 13:38

    CAD怎么标注坐标?CAD坐标标注教程

    坐标,根据测量单位给出的红线界点插入一个坐标对象,设置该点的坐标值作为基准坐标;2. 根据基准坐标进行各个
    发表于 06-06 14:30

    CAD中怎么批量标注坐标?CAD批量标注坐标

    个 回车结束选择;请选择需标注坐标的对象: 回车结束标注;.....2、勾选“仅标图层”,拾取按钮和编辑框亮显,说明此时仅拾取指定图层的特征点,单击“拾取
    发表于 06-06 15:45

    如何使用Autojs给指定QQ好友点赞

    使用Autojs来给自己的好友点赞,复制下面的代码到autojs这个脚本工具中,执行即可!
    的头像 发表于 03-03 14:24 765次阅读