Перевести Анимация прячется за другим видом

У меня есть две линейные компоновки внутри относительной компоновки. Каждая линейная компоновка содержит три изображения. Таким образом, образуется сетка картинок с тремя картинками, расположенными горизонтально в первой линейной компоновке и тремя во второй ниже, как показано выше. Как показано ниже

изображения 1,2,3 в верхней линейной разметке и 4,5,6 в нижней линейной разметке

Мой XML-код для сетки:

<RelativeLayout
    android:id="@+id/picturesLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/titleCaption"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="10dp" >


    <LinearLayout
        android:id="@+id/llimages"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignLeft="@+id/ivPrimaryProfile"
        android:layout_alignRight="@+id/ivPrimaryProfile"
        android:layout_below="@+id/ivPrimaryProfile"
         android:layout_marginTop="5dp"

        >

        <RelativeLayout 
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/rl2" 
android:gravity="center"
>

         <ImageView
        android:id="@+id/ivProfile2"
        android:layout_width="60dp"
        android:layout_height="60dp"

        android:layout_gravity="center"

        android:scaleType="centerCrop"
        android:src="@drawable/addphoto" />

         <ImageView
        android:id="@+id/ivCross2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/ivProfile2"
        android:src="@drawable/cross_white"
        android:visibility="gone" />

         </RelativeLayout>
         <View 
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
             />
          <RelativeLayout 
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/rl3" 
android:gravity="center"
>
    <ImageView
        android:id="@+id/ivProfile3"
        android:layout_width="60dp"
        android:layout_height="60dp"

        android:layout_gravity="center"



        android:scaleType="centerCrop"
        android:src="@drawable/addphoto" />
    <ImageView
        android:id="@+id/ivCross3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ivProfile3"
        android:layout_alignTop="@+id/ivProfile3"
        android:src="@drawable/cross_white"
        android:visibility="gone" />
    </RelativeLayout>
    <View 
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
             />
<RelativeLayout 
android:layout_width="60dp"
android:layout_height="60dp"
 android:id="@+id/rl4" 
android:gravity="center"
>
    <ImageView
        android:id="@+id/ivProfile4"
        android:layout_width="60dp"
        android:layout_height="60dp"

        android:layout_gravity="center"



        android:scaleType="centerCrop"
        android:src="@drawable/addphoto" />
    <ImageView
        android:id="@+id/ivCross4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ivProfile4"
        android:layout_alignTop="@+id/ivProfile4"
        android:src="@drawable/cross_white"
        android:visibility="gone" />
        </RelativeLayout>


    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignLeft="@+id/ivPrimaryProfile"
        android:layout_alignRight="@+id/ivPrimaryProfile"
        android:layout_below="@+id/llimages"
         android:layout_marginTop="5dp"

        >

        <RelativeLayout 
android:layout_width="60dp"
android:layout_height="60dp"
 android:id="@+id/rl5" 
android:gravity="center"
>
         <ImageView
        android:id="@+id/ivProfile5"
        android:layout_width="60dp"
        android:layout_height="60dp"

        android:layout_gravity="center"

        android:scaleType="centerCrop"
        android:src="@drawable/addphoto" />

         <ImageView
        android:id="@+id/ivCross5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ivProfile5"
        android:layout_alignTop="@+id/ivProfile5"
        android:src="@drawable/cross_white"
        android:visibility="gone" />
         <View 
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
             />
                    </RelativeLayout>

<RelativeLayout 
android:layout_width="60dp"
android:layout_height="60dp"
 android:id="@+id/rl6" 
android:gravity="center"
>
    <ImageView
        android:id="@+id/ivProfile6"
        android:layout_width="60dp"
        android:layout_height="60dp"

        android:layout_gravity="center"



        android:scaleType="centerCrop"
        android:src="@drawable/addphoto" />
    <ImageView
        android:id="@+id/ivCross6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ivProfile6"
        android:layout_alignTop="@+id/ivProfile6"
        android:src="@drawable/cross_white"
        android:visibility="gone" />
    </RelativeLayout>
    <View 
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
             />
<RelativeLayout 
android:layout_width="60dp"
android:layout_height="60dp"
 android:id="@+id/rl7" 
android:gravity="center"
>
    <ImageView
        android:id="@+id/ivProfile7"
        android:layout_width="60dp"
        android:layout_height="60dp"

        android:layout_gravity="center"



        android:scaleType="centerCrop"
        android:src="@drawable/addphoto" />
    <ImageView
        android:id="@+id/ivCross7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ivProfile7"
        android:layout_alignTop="@+id/ivProfile7"
        android:src="@drawable/cross_white"
        android:visibility="gone" />
        </RelativeLayout>

    </LinearLayout>


</RelativeLayout>

Проблема:

Я хочу, чтобы изображения 4,5,6 были переведены в положение image1. Что происходит, но проблема в том, что при переводе любого из изображений 4,5,6 они переводятся за изображение1 (анимация перевода скрывается за верхним линейным макетом)

Моя анимация перевода дана:

TranslateAnimation anim = new TranslateAnimation( 0, toX - fromX , 0, toY -        fromY );

    anim.setDuration(500);
    anim.setFillAfter( true );

    view.startAnimation(anim);

Я уверен, что перевод анимационного кода не имеет проблем. Что-то не так с моим макетом

3 ответа

Посмотрите на setZAdjustment.

Constant    Value   Description
normal      0       The content being animated be kept in its current Z order.
top         1       The content being animated is forced on top of all other content for the duration of the animation.
bottom     -1       The content being animated is forced under all other content for the duration of the animation.

android:zAdjustment работает только с оконной анимацией (присутствует с самого начала, API 1)

android:translationZ а также android:elevation работает с API 21

View "на вершине" является последним отрисованным, поэтому последний в XML (последний дочерний ViewGroup), даже при анимации / переводе.

Позиционирование / заказ внутри RelativeLayout это просто - используйте выравнивание по родительским ребрам и другим представлениям внутри родителя.

За LinearLayout Вы должны создать подкласс и переопределить метод getChildDrawingOrder, который применим также для всех других ViewGroup подклассы (даже RelativeLayout если вы предпочитаете вместо выравнивания):

@Override
protected int getChildDrawingOrder(int childCount, int i) {
    return (childCount - 1) - i; //reversed drawing order
}

не забудьте также добавить эту строку в конструкторы:

setChildrenDrawingOrderEnabled(true); //required!

за i=0 Вы должны вернуть положение первого ребенка View рисовать, для i=childCount-1 возврат позиции View последний рисовать (будет поверх других). По умолчанию метод возвращает i так что сначала View в XML сначала рисуется

обратите внимание, что вы не можете использовать translationX (или Y) и двигаться "снаружи" ViewGroup (родительские) границы

setZAdjustment или же android:translationZ а также android:elevation только для API 21 (леденец на палочке) и выше. Поэтому лучше поместить анимированный вид под видом сверху в XML внутри LinearLayout,

Затем установите для фона вида сверху тот же цвет, что и у окна. использование android:background="?android:attr/windowBackground" установить цвет по умолчанию. Затем переведите анимированный вид в вид сверху, и это создаст эффект, что анимированный вид исчезнет за видом сверху. Я надеюсь это имеет смысл.

Другие вопросы по тегам