我有一个包含3个ImageViews(A,B和C)的RelativeLayout。单击其中一个时,其他两个将淡出,单击的图像将滑动到A所在的位置。如果单击的图像为A,则其他两个将淡出。在图像完成滑动动画后,其他图像可见性属性设置为GONE。
当点击的图像为A时,这与我期望的完全一样。但是当点击的图像是B或C(现在占据与A相同的空间)时,将A的可见性设置为GONE会导致单击的图像也消失(如同,我看不到它)。
如果我将未点击的图像的可见性设置为INVISIBLE而不是GONE,则没有问题。我还要提一下,如果单击A,也没有问题。
所以,问题似乎是两个视图重叠,其中一个视图的可见性设置为VISIBLE而另一个设置为GONE,那么你将无法看到其中任何一个。为什么会这样?视图占用的空间是否具有可见性GONE基本上无法使用屏幕空间,直到它再次标记为VISIBLE?我确信我可以删除视图而不是将它们设置为GONE,但我不想这样做。在我希望它们消失之后不久,我就会重新激活它们。
修改
我已经将动画代码更改为使用ObjectAnimator,以防问题是视图实际上没有正确翻译。它没有解决问题,在我将其他视图的可见性设置为GONE之后,翻译的视图仍然消失。即使我删除了其他视图,问题仍然存在,而不是将其可见性设置为GONE(例如,使用rootLayout.removeView(view))。
这是布局XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription,PxUsage">
<ImageView
android:id="@+id/image_A"
android:layout_alignParentTop="true"
android:layout_marginLeft="image_spacing"
android:layout_width="@dimen/image_width"
android:layout_height="@dimen/image_height" />
<ImageView
android:id="@+id/image_B"
android:layout_alignParentTop="true"
android:layout_marginLeft="@dimen/image_spacing"
android:layout_toRightOf="@id/image_A"
android:layout_width="@dimen/image_width"
android:layout_height="@dimen/image_height" />
<ImageView
android:id="@+id/image_C"
android:layout_alignParentTop="true"
android:layout_marginLeft="@dimen/image_spacing"
android:layout_toRightOf="@id/image_B"
android:layout_width="@dimen/image_width"
android:layout_height="@dimen/image_height" />
</RelativeLayout>
......和一些代码:
image.animate()
.translationXBy(slideDistance)
.setDuration(slideDuration)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
for (int i=0; i<rootLayout.getChildCount(); i++) {
if (i == selectedImage) continue;
rootLayout.getChildAt(i).setVisibility(View.GONE);
}
}
});
答案 0 :(得分:0)
问题在于android:layout_toRightOf
布局属性。当目标视图消失时,布局规则实际上并不知道放置视图的位置。
如果缺少另一个布局规则的目标视图,您可以尝试layout_alignWithParentIfMissing="true"
使视图与父相对布局对齐。
或者,如果它以INVISIBLE
的方式运行,您也可以使用它。