Android Parallax Effect и View Pager

Я пытаюсь добиться эффекта параллакса в своем приложении. У меня есть FragmentActivity который реализует интерфейс OnPageChangeListener и прослушивает мои ViewPager прокрутки ViewPager .

Чтобы добиться этого эффекта в моем XML, у меня есть LinearLayout за всеми остальными видами с моим фоном, и я перемещаю его в onPageScrolled . Если я просто проведите пальцем по экрану, все будет в порядке, эффект будет работать, а положение фона изменится. Но когда мой палец покидает экран, фон перерисовывается в исходном положении (даже если я нахожусь на новой странице). Я не понимаю, почему это происходит. Здесь код моего FragmentActivity :

 public class MainActivity extends FragmentActivity implements OnPageChangeListener { // DEFINE THE PAGEADAPTER private ViewPager viewPager; private com.angtrim.ecomilano.PagerAdapter pagerAdapter; private int oldPosition = 0; private int offSet = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // CREATE VIEWPAGER viewPager = (ViewPager) findViewById(R.id.viewpager); pagerAdapter = new PagerAdapter(getApplicationContext(),getSupportFragmentManager()); // SET THE ADAPTER viewPager.setAdapter(pagerAdapter); // SET FIRST ITEM viewPager.setCurrentItem(0); // SET CHANGE PAGE LISTENER viewPager.setOnPageChangeListener(this); } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // RIGHT SWIPE if((oldPosition < arg2)) { offSet = (int)((arg2 - oldPosition)*0.5); oldPosition = arg2; } // LEFT SWIPE else if( (oldPosition > arg2)) { offSet = (int) (-(oldPosition - arg2)*0.5); oldPosition = arg2; } findViewById(R.id.backi).offsetLeftAndRight(offSet); } @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub } } 

Спасибо.

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

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

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

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

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

    Demo: youtube

    Я знаю, что вопрос старый, и я не могу ответить на ваш вопрос. Но парень по имени Matthieu создал отличный пример эффекта параллакса ViewPager, который можно найти по следующей ссылке.

    https://github.com/MatthieuLJ/ViewPagerParallax

    Возможно, эта библиотека может вам помочь:

    https://github.com/garrapeta/ParallaxViewPager

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

    https://github.com/prolificinteractive/ParallaxPager

    Установка (с версии v.7.7, проверка README для обновлений):

    1. Добавить как зависимость от Maven Central с Gradle

    2. Использовать собственный ParallaxContainer в формате XML вместо ViewPager

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

    4. Есть несколько строк для копирования / вставки, которые нужно добавить в onCreate of Activity (перейти к README для точных строк)

    Анимация планетарной планеты

    Взгляните на эту небольшую библиотеку, которую я создал – это подкласс ViewPager, который не требует дополнительной настройки для эффекта параллакса.