Имеется два ViewPager. Они имеют разную ширину. Второй ViewPager должнен пролистываться только тогда, когда первый пролистывается. Одновременное пролистывание сделать получилось, но кода оно завершается, то у второго ViewPager возвращается контент первого слайда. firstViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) { secondViewPager.scrollTo((int) (positionOffsetPixels * scale), 0) } @Override public void onPageSelected(final int position) {} @Override public void onPageScrollStateChanged(final int state) {} }) Может есть другой способ это сделать?
Нашел вот такой вот вариант. Но если начать перемещать влево, а потом, не отпуская пальца, вправо, то у secondViewPager страница сразу же меняется на следующую. Попытка исправить ни к чему не привела firstViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { private int mLastScrollPosition private int mLastPagePosition @Override public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) { if (secondViewPager.isFakeDragging()) { final int scaledPositionOffsetPixels = (int) (positionOffsetPixels * scale) int absoluteOffsetPixels = scaledPositionOffsetPixels if (mLastPagePosition != position) { absoluteOffsetPixels += (position - mLastPagePosition) * secondViewPager.getWidth() mLastPagePosition = position } secondViewPager.fakeDragBy((mLastScrollPosition - absoluteOffsetPixels)) mLastScrollPosition = scaledPositionOffsetPixels } } @Override public void onPageSelected(final int position) { } @Override public void onPageScrollStateChanged(final int state) { switch (state) { case ViewPager.SCROLL_STATE_DRAGGING: if (!secondViewPager.isFakeDragging()) secondViewPager.beginFakeDrag() break case ViewPager.SCROLL_STATE_SETTLING: case ViewPager.SCROLL_STATE_IDLE: if (secondViewPager.isFakeDragging()) { secondViewPager.endFakeDrag() mLastScrollPosition = 0 } break } } }) Обновление Пришлось отказаться от этой идеи и делать один ViewPager. Жаль, выглядело бы красиво
Ответ Единственный вариант решения, который приходит в голову — это попробовать написать свою View. View будет состоять из двух частей: верхняя, уменьшенная и вторая — увеличенная. На первой будет стоять MotionEventListener, который будет реагировать на касания и при каждом "пролистаном" пикселе будет пролистывать содержание второй части на 4 пикселя (множитель увеличения будет варьироваться в зависимости от зума второй части). Свое изучение написания кастомных View следует начать от сюда — ссылка.
Но, мне кажется, что стоит еще раз подумать над тем, зачем это делать. Может будет достаточно увеличения текста или растяжения изображения?