kkevsekk1 / AutoX

A UiAutomator on android, does not need root access(安卓平台上的JavaScript自动化工具)
Other
7.77k stars 1.84k forks source link

click操作与设置悬浮窗位置 在使用相同坐标时在屏幕上反应出的位置不同 #1118

Open xvyanzhen opened 2 months ago

xvyanzhen commented 2 months ago
  1. Autox.js 版本:7.0.1
  2. Autox.js 下载渠道:https://github.com/kkevsekk1/AutoX/releases
  3. Android 版本:Android 14
  4. Android 机型:红米k30s,荣耀V20
  5. Android 系统类别:HyperOS,鸿蒙2.0
  6. VSCODE 扩展版本 Auto.js-Autox.js-VSCodeExt (可选,如果是连接电脑的问题需要填):
  7. 问题描述:click操作与设置悬浮窗位置 在使用相同坐标时在屏幕上反应出的位置不同,经测试press(),longClick(),swipe()也有相同问题,这个两个位置差距刚好是顶部状态栏的高度,文档中并没有可以获取顶部状态栏高度的方法(只有底部导航栏的),我想要实现悬浮窗显示点击位置和根据悬浮窗设置坐标的功能,但因为这个问题,没有办法完成这个功能,希望可以统一基于坐标的操作与悬浮窗使用的坐标系
  8. 报错日志(可选):
  9. 屏幕截图(可选): 1723210358637 1723210358640
  10. 测试代码 测试代码 :

let 点击位置={ x:540, y:0, }

let 悬浮窗 = floaty.rawWindow(

); 悬浮窗.setPosition(点击位置.x-50/2, 点击位置.y-50/2-device.getVirtualBarHeigh()); 悬浮窗.setSize(50, 50); 悬浮窗.setTouchable(false); click(点击位置.x,点击位置.y); longClick(点击位置.x, 点击位置.y) press(点击位置.x, 点击位置.y, 2000) swipe(点击位置.x, 点击位置.y, 点击位置.x, 点击位置y, 1000) sleep(2000)

xvyanzhen commented 2 months ago

还有对于屏幕方向是横向还是竖向的判断也没有在文档里提及,总不能老是请高人从context里抓吧

Liberations commented 2 months ago

目测是刘海屏的区别 自己加减状态栏高度

xvyanzhen commented 2 months ago

文中说了,开发文档里没有说怎么获取状态栏的高度,并且这个数据在在让用户用悬浮窗选择坐标时必然用到,这么常用的数据居然没有写进开发文档里

kkevsekk1 commented 2 months ago

有方法获取状态栏高度

发送自我的盖乐世

-------- 原始信息 -------- 发件人: xvyanzhen @.> 日期: 2024/8/12 14:16 (GMT+08:00) 收件人: kkevsekk1/AutoX @.> 抄送: Subscribed @.***> 主题: Re: [kkevsekk1/AutoX] click操作与设置悬浮窗位置 在使用相同坐标时在屏幕上反应出的位置不同 (Issue #1118)

文中说了,开发文档里没有说怎么获取状态栏的高度,并且这个数据在在让用户用悬浮窗选择坐标时必然用到,这么常用的数据居然没有写进开发文档里

― Reply to this email directly, view it on GitHubhttps://github.com/kkevsekk1/AutoX/issues/1118#issuecomment-2283181448, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AD64RCHGE4JLV3X6VZIN7QTZRBHLZAVCNFSM6AAAAABMIP24J6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEOBTGE4DCNBUHA. You are receiving this because you are subscribed to this thread.Message ID: @.***>

vtrayy commented 2 months ago

用java方法

xvyanzhen commented 2 months ago

有方法获取状态栏高度 发送自我的盖乐世 -------- 原始信息 -------- 发件人: xvyanzhen @.> 日期: 2024/8/12 14:16 (GMT+08:00) 收件人: kkevsekk1/AutoX @.> 抄送: Subscribed @.> 主题: Re: [kkevsekk1/AutoX] click操作与设置悬浮窗位置 在使用相同坐标时在屏幕上反应出的位置不同 (Issue #1118) 文中说了,开发文档里没有说怎么获取状态栏的高度,并且这个数据在在让用户用悬浮窗选择坐标时必然用到,这么常用的数据居然没有写进开发文档里 ― Reply to this email directly, view it on GitHub<#1118 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AD64RCHGE4JLV3X6VZIN7QTZRBHLZAVCNFSM6AAAAABMIP24J6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEOBTGE4DCNBUHA. You are receiving this because you are subscribed to this thread.Message ID: @.>

我找人问了才知道一个方法,如果不懂安卓开发相关的知识的话是完全不知道的,利用的是context全局变量,而context是安卓开发中的一个类 具体获取状态栏高度和屏幕旋转方向的代码如下

//单位像素(px)
function 状态栏高度获取(){
let resources = context.getResources();
let resourceld = resources.getIdentifier("status_bar_height", "dimen", "android");
let 状态栏高度 = resources.getDimensionPixelSize(resourceld);
return 状态栏高度;
}

function 屏幕旋转方向获取() {
    let wm = context.getSystemService(context.WINDOW_SERVICE);
    let display = wm.getDefaultDisplay();
    let rotation = display.getRotation();

    // 判断是否为纵向或横向
    if (rotation === 0 || rotation === 2) {
        return "纵向";
    } else {
        return "横向";
    }
}

用相同坐标却不显示同一位置,这个很反直觉,希望这个问题可以在未来解决了,但现在至少把运用context的这些代码写进官方示例里或者文档里,又或者在文档里写清楚context的作用,不然就的写"一个android.content.Context对象"很令人迷惑的.

kkevsekk1 commented 2 months ago

这个可以大家一起完善,我们的理解是在懂安卓的,容易漏这些

发送自我的盖乐世

-------- 原始信息 -------- 发件人: xvyanzhen @.> 日期: 2024/8/13 10:07 (GMT+08:00) 收件人: kkevsekk1/AutoX @.> 抄送: aaron @.>, Comment @.> 主题: Re: [kkevsekk1/AutoX] click操作与设置悬浮窗位置 在使用相同坐标时在屏幕上反应出的位置不同 (Issue #1118)

有方法获取状态栏高度 发送自我的盖乐世 … -------- 原始信息 -------- 发件人: xvyanzhen @.> 日期: 2024/8/12 14:16 (GMT+08:00) 收件人: kkevsekk1/AutoX @.> 抄送: Subscribed @.> 主题: Re: [kkevsekk1/AutoX] click操作与设置悬浮窗位置 在使用相同坐标时在屏幕上反应出的位置不同 (Issue #1118https://github.com/kkevsekk1/AutoX/issues/1118) 文中说了,开发文档里没有说怎么获取状态栏的高度,并且这个数据在在让用户用悬浮窗选择坐标时必然用到,这么常用的数据居然没有写进开发文档里 D Reply to this email directly, view it on GitHub<#1118 (comment)https://github.com/kkevsekk1/AutoX/issues/1118#issuecomment-2283181448>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AD64RCHGE4JLV3X6VZIN7QTZRBHLZAVCNFSM6AAAAABMIP24J6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEOBTGE4DCNBUHA. You are receiving this because you are subscribed to this thread.Message ID: @.>

我找人问了才知道一个方法,如果不懂安卓开发相关的知识的话是完全不知道的,利用的是context全局变量,而context是安卓开发中的一个类 具体获取状态栏高度和屏幕旋转方向的代码如下

//单位像素(px) function 状态栏高度获取(){ let resources = context.getResources(); let resourceld = resources.getIdentifier("status_bar_height", "dimen", "android"); let 状态栏高度 = resources.getDimensionPixelSize(resourceld); return 状态栏高度; }

function 屏幕旋转方向获取() { let wm = context.getSystemService(context.WINDOW_SERVICE); let display = wm.getDefaultDisplay(); let rotation = display.getRotation();

// 判断是否为纵向或横向
if (rotation === 0 || rotation === 2) {
    return "纵向";
} else {
    return "横向";
}

}

用相同坐标却不显示同一位置,这个很反直觉,希望这个问题可以在未来解决了,但现在至少把运用context的这些代码写进官方示例里或者文档里,又或者在文档里写清楚context的作用,不然就的写"一个android.content.Context对象"很令人迷惑的.

― Reply to this email directly, view it on GitHubhttps://github.com/kkevsekk1/AutoX/issues/1118#issuecomment-2285205965, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AD64RCD7WTOVWK2GT2RAKYTZRFS6LAVCNFSM6AAAAABMIP24J6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEOBVGIYDKOJWGU. You are receiving this because you commented.Message ID: @.***>