如果一个视图在移动或其XY位置发生改变,我该如何监听它以获取其XY坐标?这个视图不一定是被拖动的(或由用户触摸事件),它可能会因为方向改变或被显示键盘推上(向上)等而发生改变。当它发生变化时,我想知道它的更新XY坐标,我应该怎么做?
如果一个视图在移动或其XY位置发生改变,我该如何监听它以获取其XY坐标?这个视图不一定是被拖动的(或由用户触摸事件),它可能会因为方向改变或被显示键盘推上(向上)等而发生改变。当它发生变化时,我想知道它的更新XY坐标,我应该怎么做?
你可以像这样做
final View activityRootView = findViewById(R.id.mainLayout);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@SuppressLint("NewApi")
@Override
public void onGlobalLayout() {
findViewById(R.id.textView).getX();
findViewById(R.id.textView).getY();
}
});
希望这可以帮助到您。addOnLayoutChangeListener
比addOnGlobalLayoutListener
更好,因为addOnGlobalLayoutListener
会由于根视图的所有子视图的更改而被调用。 - 1552980358可能 addOnLayoutChangeListener
可以工作。它在视图的布局函数中检测到框架边界变化时调用。如果框架边界没有变化,而父边界发生了变化,从而改变了视图位置,那么我们可能不会在这里收到此事件,然后需要一些带有额外代码的 addOnGlobalLayoutListener 来比较屏幕上的实际位置,但我不会走这条路,因为它会引起其他问题。