Как анимировать представления при изменении смещения позиции 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);
}
Вторая проблема не решена. Когда представление достигает правой части страницы, оно исчезает. Другими словами, представление не может перейти на следующую страницу (фрагмент).