将一个VISIBILITY设置为GONE时重叠视图会导致其他视图消失

时间:2014-01-11 14:59:59

标签: android android-layout android-view android-xml

我有一个包含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);
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

问题在于android:layout_toRightOf布局属性。当目标视图消失时,布局规则实际上并不知道放置视图的位置。

如果缺少另一个布局规则的目标视图,您可以尝试layout_alignWithParentIfMissing="true"使视图与父相对布局对齐。

或者,如果它以INVISIBLE的方式运行,您也可以使用它。