我的设备:LG G7 Thinq ,分辨率3120x1440,刘海屏
注意到获取悬浮窗位置的时候,如果把悬浮窗移动到屏幕最左上角,获取到的y坐标会小于0,但是很明显点击时使用的屏幕坐标没有负值。
悬浮窗的坐标系和屏幕坐标系是否有所不同?如果有所不同,有没有转换的方法?
我的设备:LG G7 Thinq ,分辨率3120x1440,刘海屏
注意到获取悬浮窗位置的时候,如果把悬浮窗移动到屏幕最左上角,获取到的y坐标会小于0,但是很明显点击时使用的屏幕坐标没有负值。
悬浮窗的坐标系和屏幕坐标系是否有所不同?如果有所不同,有没有转换的方法?
目前想实现获取屏幕坐标的功能,现在的实现方式是让用户拖动一个悬浮窗到指定位置,之后获取这个悬浮窗的坐标。
由于这个特性,获取的坐标不太准确,有什么解决的办法吗?
使用场景是在3d引擎中,因此不能使用控件模式。
实现代码:
function getPosInteractive(promptText) {
let confirmed = false;
//提示和确认按钮的框
let confirmWindow = floaty.rawWindow(
<frame gravity="left|top">
<vertical bg="#7fffff7f">
<text id="promptText" text="" textSize="14sp" />
<button id="confirmBtn" style="Widget.AppCompat.Button.Colored" text="确定" />
</vertical>
</frame>
);
confirmWindow.setTouchable(true);
ui.run(function(){
confirmWindow.promptText.setText("请将另一个悬浮窗口左上端移到" + promptText + ",之后点击确认来获取坐标");
confirmWindow.confirmBtn.click(()=>{
confirmed = true;
});
});
//只有一个箭头的框,用来获取坐标
let selectorWindow = floaty.window(
<frame gravity="left|top">
<img src="data:image/jpg;base64, ...."/>
</frame>);
selectorWindow.setAdjustEnabled(true);
while(!confirmed) sleep(50);
confirmWindow.close();
selectorWindow.close();
return {
"x": selectorWindow.getX(),
"y": selectorWindow.getY()
};
}