我有两个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
}
答案 0 :(得分:3)
您何时尝试获取ImageView的X和Y?如果你在onCreate
(或者当前正在放置视图的其他地方)直接进行,那么它们的x和y将为零,因为它们尚未布局。
在这种情况下,您有两个选项:
View.post { }
并在回调中执行您正在执行的操作。OnGlobalLayoutListener
。 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.
}
}
});