Эффект параллакса Android и просмотр пейджера

Я пытаюсь добиться эффекта параллакса в своем приложении. У меня есть FragmentActivity, который реализует интерфейс OnPageChangeListener и прослушивает мои 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

}
}

Спасибо.


person user1305336    schedule 09.06.2013    source источник
comment
можно использовать это для фона, а эффект параллакса зависит от движения экрана   -  person Prasad    schedule 18.11.2014


Ответы (5)


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

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

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

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

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

демонстрация: youtube

person xgc1986    schedule 25.04.2014
comment
Возможен ли эффект параллакса в пейджере вертикального просмотра? - person user1076881; 18.11.2015

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

https://github.com/MatthieuLJ/ViewPagerParallax

person Jakob    schedule 19.09.2013

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

https://github.com/garrapeta/ParallaxViewPager

person GaRRaPeTa    schedule 22.03.2014

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

https://github.com/prolificinteractive/ParallaxPager

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

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

  2. Используйте пользовательский ParallaxContainer в макете XML вместо ViewPager

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

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

параллаксная анимация планеты

person matt---    schedule 13.05.2014
comment
Отличная библиотека, я использовал ее для своего экрана параллакса, и она отлично работает. - person Shirane85; 31.07.2014

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

person Andras K    schedule 09.05.2014