Ответ 1
Этот вопрос немного устарел, но я нашел его, когда пытался это сделать...
Я реализовал свое собственное решение, в основном расширяя ViewPager
и переопределяя onDraw
.
Вы можете найти весь код с помощью простого примера здесь
Я пытаюсь подражать эффекту параллакса при скольжении по моим фрагментам, я читал о beginFakeDrag и fakeDragBy, но, честно говоря, я не знаю, даже если это лучший подход к моей проблеме.
Кто-нибудь сделал что-то подобное с ViewPager или подскажет, как мне это сделать?
Спасибо
Этот вопрос немного устарел, но я нашел его, когда пытался это сделать...
Я реализовал свое собственное решение, в основном расширяя ViewPager
и переопределяя onDraw
.
Вы можете найти весь код с помощью простого примера здесь
Легкий способ сделать это без использования специальной библиотеки - реализовать 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());
Я знаю, что это немного устарело, но посмотрите на это https://github.com/xgc1986/ParallaxPagerLibrary
Он не переопределяет метод onDraw, а эффект не только с изображениями, он работает с каждым видом вида
mPager.setPageTransformer(false, new ParallaxTransformer(R.id.parallaxContent));
R.id.paraallaxContent - это идентификатор представления, который вы хотите использовать.
если другие решения не нуждаются в какой-либо конкретной структуре для работы, а также независимо от формата
demo: youtube
Возможно, эта библиотека может вам помочь:
Вы можете взглянуть на это:
https://github.com/luxsypher/ParallaxViewPager
вы можете применить эффект параллакса для любого элемента вашего представления и дать им все разные скорости
Это подкласс ViewPager, который я написал, довольно прост в использовании. Вам не нужно ничего делать с этим, просто включите зависимость и используйте ее как стандартный ViewPager. Доступно на GitHub.
Эта библиотека полностью настраивается в направлениях x и y и включает альфа-эффекты:
https://github.com/prolificinteractive/ParallaxPager
Установка (начиная с v0.7, проверьте README для обновлений):
Добавить как зависимость от Maven Central с помощью Gradle
Используйте ParallaxContainer
в формате XML вместо ViewPager
Создайте XML файл макета для каждой страницы (атрибуты x/y/alpha могут быть установлены отдельно для каждого объекта, перемещающегося в/из страницы)
Есть несколько строк для копирования/вставки для добавления в onCreate
вашей деятельности
Возможно, эта библиотека может быть полезна: https://github.com/matrixxun/ProductTour
он использует "ViewPager.PageTransformer", чтобы заставить вещи двигаться по-другому внутри.
Вы можете использовать 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)