Android ViewAnimator: анимация при смене дочернего viewstub - PullRequest
3 голосов
/ 20 октября 2011

Вот моя проблема:

У меня есть ViewAnimator вроде:

<ViewAnimator
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/viewanimator">

    <ViewStub
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/form_viewstub"
        android:inflatedId="@+id/form_view"
        android:layout="@layout/form_layout"/>

    <ViewStub
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/history_viewstub"
        android:inflatedId="@+id/history_view"
        android:layout="@layout/history_layout"/>

    <ViewStub
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/call_viewstub"
        android:inflatedId="@+id/call_view"
        android:layout="@layout/call_layout"/>

</ViewAnimator>

Когда я анимирую viewstub, который идет после текущего, проблем нет. Проблема в том, что когда я пытаюсь анимировать viewstub раньше, я не вижу анимацию. Вот конкретный пример:

Когда я пытаюсь анимировать id/history_viewstub с помощью следующей анимации и id/call_viewstub является текущим отображаемым макетом, я ничего не вижу (я думаю, что анимация воспроизводится в текущем представлении)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromXScale="0.0"
        android:toXScale="1.0"
        android:fromYScale="0.0"
        android:toYScale="1.0"
        android:pivotX="1.0"
        android:pivotY="0.0"
        android:fillAfter="true"
        android:duration="600"/>
    <translate
        android:fromXDelta="100%"
        android:toXDelta="0"
        android:duration="600"/>
</set>

Кто-нибудь уже сталкивался с этой проблемой?

Есть ли способ указать z-index для viewstubs, как в веб-разработке?


Редактировать

Использование свойства ZAdjustment не решает проблему

Ответы [ 3 ]

1 голос
/ 10 марта 2012

Я уверен, что вы уже решили эту проблему, но поскольку ответа нет ... вы должны использовать android:zAdjustment="top".

0 голосов
/ 16 июля 2013

Вы можете использовать этот View.bringToFront .

Этот метод переместит ваше представление в конец списка дочерних элементов.Таким образом, индекс его и других просмотров изменится.Будьте осторожны с этим.

0 голосов
/ 29 октября 2011

Мне кажется, что вы на самом деле не используете функциональность класса ViewAnimator, а просто унаследованный класс FrameLayout.

Чтобы анимировать переходы просмотра, вам нужно установить android:inAnimation иandroid:outAnimation свойств на ViewAnimator и инициируйте переходы из вашего кода, используя setDisplayedChild() или showNext() и showPrevious().

...