Как анимировать представления при изменении смещения позиции ViewPager

Мы хотели бы создать приложение с анимацией, где пользователь прокручивает страницы и, по мере прокрутки пользователя, анимируется и перемещается по всем слайдам. Анимационное представление должно перемещаться по мере прокрутки пользователя, поэтому, если пользователь быстрее прокручивает анимированное представление, он должен двигаться быстрее, и если пользователь прокручивается назад к предыдущей странице, анимированное представление должно перемещаться назад.

Это очень просто в iOS с https://github.com/IFTTT/JazzHands, но я не могу найти способ сделать это в Android.

Проблемы, которые я нашел:

  • Анимация выполняется в режиме реального времени; вы не можете позволить время быть смещением ViewPager.
  • В FragmentPagerAdapter представления из одного фрагмента не могут быть перемещены в другой фрагмент.

Любое предложение? Спасибо.

Ответ 1

Для второй проблемы:

ViewPagerAdapter уничтожит представления, когда они больше не нужны, чтобы сохранить видимый вид на всех страницах, которые вам нужны, чтобы добавить их в макет, содержащий ViewPager.

Что-то вроде этого может работать:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white_transparent"
        />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text out of view pager"
        android:textSize="25sp"
        />
</RelativeLayout>

Ответ 2

Это частичный ответ. Это для первой проблемы.

  • Анимация выполняется в режиме реального времени; вы не можете позволить время быть смещением ViewPager.

Я могу изменить свойства анимированного представления в методе onPageScrolled OnPageChangeListener ViewPager.

Это простой пример, который изменяет левое поле анимированного представления, чтобы он перемещался вправо.

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels);

            LayoutParams params = (LayoutParams) animatedView.getLayoutParams();
            params.setMargins((int) ((position + positionOffset) * 500), 0, 0, 0);
            animatedView.setLayoutParams(params);
        }

Вторая проблема не решена. Когда представление достигает правой части страницы, оно исчезает. Другими словами, представление не может перейти на следующую страницу (фрагмент).