Перевести Анимация прячется за другим видом
У меня есть две линейные компоновки внутри относительной компоновки. Каждая линейная компоновка содержит три изображения. Таким образом, образуется сетка картинок с тремя картинками, расположенными горизонтально в первой линейной компоновке и тремя во второй ниже, как показано выше. Как показано ниже
Мой 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"
установить цвет по умолчанию. Затем переведите анимированный вид в вид сверху, и это создаст эффект, что анимированный вид исчезнет за видом сверху. Я надеюсь это имеет смысл.