Подтвердить что ты не робот

Эффект Parallax в Android ViewPager

Я пытаюсь подражать эффекту параллакса при скольжении по моим фрагментам, я читал о beginFakeDrag и fakeDragBy, но, честно говоря, я не знаю, даже если это лучший подход к моей проблеме.

Кто-нибудь сделал что-то подобное с ViewPager или подскажет, как мне это сделать?

Спасибо

4b9b3361

Ответ 1

Этот вопрос немного устарел, но я нашел его, когда пытался это сделать...

Я реализовал свое собственное решение, в основном расширяя ViewPager и переопределяя onDraw.

Вы можете найти весь код с помощью простого примера здесь

Ответ 2

Легкий способ сделать это без использования специальной библиотеки - реализовать ViewPager.PageTransformer

Я создал свои макеты для использования того же id для своего фонового элемента. Для моего примера все фоновые изображения будут использовать идентификатор background

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/background"
    android:src="@drawable/img12"
    android:scaleType="fitXY"/>

Затем, когда я вхожу в реализацию ViewPager.PageTransformer, я могу ссылаться на это изображение следующим образом:

public class Transformer implements ViewPager.PageTransformer{
    @Override
    public void transformPage(View page, float position) {
        if(position >= -1 && position <= 1){
            page.findViewById(R.id.background).setTranslationX(-position * page.getWidth() / 2);
        } else {
            page.setAlpha(1);
        }
    }
}

Наконец, я присваиваю свой ViewPager.PageTransformer моему ViewPager так.

ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setPageTransformer(false, new Transformer());

Ответ 3

Я знаю, что это немного устарело, но посмотрите на это https://github.com/xgc1986/ParallaxPagerLibrary

Он не переопределяет метод onDraw, а эффект не только с изображениями, он работает с каждым видом вида

mPager.setPageTransformer(false, new ParallaxTransformer(R.id.parallaxContent));

R.id.paraallaxContent - это идентификатор представления, который вы хотите использовать.

если другие решения не нуждаются в какой-либо конкретной структуре для работы, а также независимо от формата

demo: youtube

Ответ 5

Вы можете взглянуть на это:

https://github.com/luxsypher/ParallaxViewPager

вы можете применить эффект параллакса для любого элемента вашего представления и дать им все разные скорости

Ответ 6

Это подкласс ViewPager, который я написал, довольно прост в использовании. Вам не нужно ничего делать с этим, просто включите зависимость и используйте ее как стандартный ViewPager. Доступно на GitHub.

Ответ 7

Эта библиотека полностью настраивается в направлениях x и y и включает альфа-эффекты:

https://github.com/prolificinteractive/ParallaxPager

Установка (начиная с v0.7, проверьте README для обновлений):

  • Добавить как зависимость от Maven Central с помощью Gradle

  • Используйте ParallaxContainer в формате XML вместо ViewPager

  • Создайте XML файл макета для каждой страницы (атрибуты x/y/alpha могут быть установлены отдельно для каждого объекта, перемещающегося в/из страницы)

  • Есть несколько строк для копирования/вставки для добавления в onCreate вашей деятельности

parallax planet animation

Ответ 8

Возможно, эта библиотека может быть полезна: https://github.com/matrixxun/ProductTour

он использует "ViewPager.PageTransformer", чтобы заставить вещи двигаться по-другому внутри.

Ответ 9

Вы можете использовать Parallax ViewPager Android Library, который вам нужно реализовать, просто добавьте немного ниже строки в build.gradle для Android Studio.

allprojects {
    repositories {
      ...
      maven { url 'https://jitpack.io' }
    }
}

И затем добавьте зависимость

dependencies {
    compile 'com.github.demoNo:ParallaxViewPager:v1.0.0'
}

И теперь вы можете использовать эту библиотеку как обычный ViewPager

<li.yohan.parallax.ParallaxViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
ParallaxViewPager mPager = ((ParallaxViewPager) findViewById(R.id.pager));
mPager.setAdapter(new Adapter());

Здесь вы можете увидеть

Вы можете установить в xml:

android:background="@drawable/background"

или в коде

setBackgroundResource(int resid)
setBackground(Drawable background)