gpt4 book ai didi

android - View.getLocationOnScreen 无法正常工作

转载 作者:太空狗 更新时间:2023-10-29 16:18:07 38 4
gpt4 key购买 nike

我想将 View 的边界投影/转换为屏幕坐标。局部边界是 0,0,1280,628,我 View 正上方的 ActionBar 是 108 像素高。

问题是 view.getLocationOnScreen 将第一个点转换为正确的 0x108。但它也将所有其他角(1280x0、1280x628、0x628)再次转换为 0x180。知道为什么吗?

那是我的代码。

public static void getLocationOnScreen(View view, final Rect src, Rect dst) {
if (view == null || src == null)
return;

if (dst == null)
dst = new Rect();

Point[] corners = RectTools.getCornerPoints(src);
int[] location = new int[2];

for (int i = 0; i < corners.length; i++) {
Point current = corners[i];
location[0] = current.x;
location[1] = current.y;

view.getLocationOnScreen(location);

corners[i] = new Point(location[0], location[1]);
}

createRectangle(dst, corners);
}

最佳答案

好吧,我只是理解错了这个函数——也许是因为我来自 Microsoft .NET C# 世界,在那里您可以轻松地将坐标从控件转换到屏幕,反之亦然。不管怎样,view.getLocationOnScreen 只是返回转换后的 View 左上角。所以你必须用它作为偏移量。

public static void getLocationOnScreen(View view, final Rect src, Rect dst) {
if (view == null || src == null)
return;

if (dst == null)
dst = new Rect();

int[] location = new int[2];
view.getLocationOnScreen(location);
int offsetX = location[0];
int offsetY = location[1];

dst.set(src.left + offsetX, src.top + offsetY, src.right + offsetX,
src.bottom + offsetY);
}

关于android - View.getLocationOnScreen 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21907202/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com