анимация пролистывания пейджера для Android

Я пытаюсь сделать некоторую анимацию на странице смахивания в пейджере просмотра, переопределив метод transformPage (), так что, когда я смахиваю справа налево, новая страница (страница, идущая с правой стороны) должна появляться под предыдущей страницей, как только когда начнется анимация, а затем предыдущая страница должна сдвинуться влево поверх новой страницы. Когда я смахиваю слева направо, новая страница должна скользить по предыдущей странице и полностью ее закрывать. Но я не могу этого добиться. Я пробовал следующее: -

if(position > 0 && position < 1)
{
    int pageWidth = page.getWidth();
    float translateValue = (-position * pageWidth);
    if(translateValue < pageWidth)
    {
        translationX = translateValue;
    }
    else
    {
        translationX = 0;
    }
}
else 
{
    alpha = 1;
    scale = 1;
    translationX = 0;
}

Пожалуйста, дайте несколько предложений. Спасибо


person Tushar Karwa    schedule 21.09.2015    source источник
comment
Взгляните на эту библиотеку. github.com/ToxicBakery/ViewPagerTransforms   -  person Arkar Aung    schedule 21.09.2015
comment
Не уверен, что именно эффект, который вы описываете - Примерно так - medium.com/@BashaChris/   -  person Tasos    schedule 21.09.2015
comment
Похожую анимацию можно посмотреть в приложении Play Music на смартфонах Android 5.0. На экране воспроизведения, когда вы проводите пальцем справа налево, новая страница появляется под текущей страницей, а при пролистывании слева направо новая страница появляется / скользит над / над текущей страницей.   -  person Tushar Karwa    schedule 22.09.2015


Ответы (1)


Это должно работать так, как вы хотите, вам просто нужно поместить его в свой класс PagerTransformer:

private static final float MIN_SCALE_DEPTH = 0.75f;

 @Override
public void transformPage(View page, float position) {
    final float alpha;
    final float scale;
    final float translationX;


            if (position > 0 && position < 1) {
                alpha = (1 - position);
                scale = MIN_SCALE_DEPTH + (1 - MIN_SCALE_DEPTH) * (1 - Math.abs(position));
                translationX = (page.getWidth() * -position);
            } else {
                alpha = 1;
                scale = 1;
                translationX = 0;
            }

    page.setAlpha(alpha);
    page.setTranslationX(translationX);
    page.setScaleX(scale);
    page.setScaleY(scale);
person Michał Hawryszko    schedule 21.09.2015
comment
Я пробовал ваш код, и проблема такая же, как упоминалось в моем комментарии выше. Используя приведенный выше код, правая страница всегда остается вверху левой страницы, а мне просто нужно обратное. - person Tushar Karwa; 22.09.2015
comment
Я нашел решение проблемы, изменив первый параметр, переданный методу setPageTransformer (), на true и использовал код преобразователя, опубликованный Михалом Гавришко. Я прочитал документацию, относящуюся к этому параметру, но не понимаю, как порядок рисования изменяет Z-индексы страниц. Кто-нибудь может это объяснить? - person Tushar Karwa; 22.09.2015
comment
Извините, я забыл упомянуть о настройке этого параметра. Согласно документации этот параметр изменяет порядок рисования страниц с первого на последний, с последнего на первый. - person Michał Hawryszko; 23.09.2015