View.getX和getY返回零

时间:2018-03-15 16:42:03

标签: android

我有两个ImageView。我想把一个移到另一个上面。当我尝试检索其中一个ImageViews位置的值以将另一个移动到它时,我在x和y上都得到0。我尝试过使用getLeft / getTop,getX()/ getY()和getPositionOnScreen()。它们都返回0.两个视图都在同一个约束布局中。

ImageView的XML返回0

<ImageView
    android:id="@+id/playerOneCard"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="64dp"
    android:layout_marginStart="32dp"
    android:layout_marginTop="8dp"
    app:layout_constraintBottom_toTopOf="@+id/imageView"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="1.0"
    app:srcCompat="@drawable/card" />

返回位置的代码

int x = playerOneCardMove.getLeft();
int y = playerOneCardMove.getTop();

我也使用了以下

int x = playerOneCardMove.getX();
int y = playerOneCardMove.getY();

int[] imageCoordinates = new int[2];
playerOneCard.getLocationOnScreen(imageCoordinates);
int x = imageCoordinates[0];
int y = imageCoordinates[1];

执行onClick以移动卡的代码

public void transitionPlayerOne(){
    int x = playerOneCard.getLeft();
    int y = playerOneCard.getTop();
    TranslateAnimation animation = new TranslateAnimation(Animation.ABSOLUTE, x, Animation.ABSOLUTE, y);
    animation.setDuration(1000);  // animation duration
    animation.setFillAfter(true);
    playerOneCardMove.startAnimation(animation);  // start animation
}

1 个答案:

答案 0 :(得分:3)

您何时尝试获取ImageView的X和Y?如果你在onCreate(或者当前正在放置视图的其他地方)直接进行,那么它们的x和y将为零,因为它们尚未布局。

在这种情况下,您有两个选项:

  1. 使用View.post { }并在回调中执行您正在执行的操作。
  2. 使用下面的OnGlobalLayoutListener
  3. imageview.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // do something about the view's x and y. also don't forget to remove this OnGlobalLayoutListener using removeOnGlobalLayoutListener in here. } } });