gpt4 book ai didi

android - 确定 ObjectAnimator 的 translationX/Y 值;如何将 View 移动到确切的屏幕位置?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:07 24 4
gpt4 key购买 nike

我正在尝试使用 ObjectAnimator.ofFloat(...) 将 View 移动到屏幕的右上角但是,我没有得到预期的结果。我使用 ViewTreeListener 等预先获取 View 的坐标,并且我已经知道我需要从总宽度的末端偏移的 x 值。我无法将任何维度移动到我想要的位置。相关代码:

获取起始坐标;当前 View 所在的位置:

int[] userCoords = new int[]{0,0};
userControlLayout.getLocationInWindow(userCoords);
//also tried getLocationInScreen(userCoords); same result
userUpLeft = userCoords[0];
userUpTop = userCoords[1];

令人惊讶的是,当我调用 userControlLayout.getLeft() 时,我得到与 userUpLeft 相同的值(在屏幕坐标中,而不是相对于父级)我希望它们根据我的不同对文档的理解。无论如何...

构建 ObjectAnimators:

//testXTranslate is a magic number of 390 that works; arrived at by trial. no idea why that 
// value puts the view where I want it; can't find any correlation between the dimension
// and measurements I've got
ObjectAnimator translateX = ObjectAnimator.ofFloat(userControlLayout, "translationX",
testXTranslate);

//again, using another magic number of -410f puts me at the Y I want, but again, no idea //why; currently trying the two argument call, which I understand is from...to
//if userUpTop was derived using screen coordinates, then isn't it logical to assume that -//userUpTop would result in moving to Y 0, which is what I want? Doesn't happen
ObjectAnimator translateY = ObjectAnimator.ofFloat(userControlLayout, "translationY",
userUpTop, -(userUpTop));

我的理解是,一个 arg 调用等效于指定您要平移/移动到的结束坐标,而两个 arg 版本开始于...结束于,或者,从...到我已经两者都搞砸了,无法到达那里。

显然,我缺少非常基础的知识,只是想弄清楚那到底是什么。非常感谢任何指导。谢谢。

最佳答案

首先,userControlLayout.getLeft() 是相对于父 View 的。如果此父级与屏幕的左边缘对齐,则这些值将匹配。对于 getTop(),它通常是不同的,因为 getLocationInWindow() 返回绝对坐标,这意味着 y = 0 是窗口的最左上角窗口——即在操作栏后面。

通常您希望相对于其父控件平移控件(因为如果它移出这些边界甚至不会被绘制)。所以假设你想把控件定位在(targetX, targetY),你应该使用:

int deltaX = targetX - button.getLeft();
int deltaY = targetY - button.getTop();

ObjectAnimator translateX = ObjectAnimator.ofFloat(button, "translationX", deltaX);
ObjectAnimator translateY = ObjectAnimator.ofFloat(button, "translationY", deltaY);

当您向 ObjectAnimator 提供多个值时,您是在指示动画中的中间值。所以在你的情况下 userUpTop, -userUpTop 会导致翻译先下降然后上升。请记住,平移(以及旋转和所有其他变换)始终相对于原始位置。

关于android - 确定 ObjectAnimator 的 translationX/Y 值;如何将 View 移动到确切的屏幕位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24217357/

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