Как изменить вертикальный угол поворота ViewPager - PullRequest
0 голосов
/ 09 мая 2020

Я использую VerticalViewPager для вертикального прокрутки изображений. Пейджер с вертикальным обзором является строгим, когда дело доходит до угла прокрутки, что означает, что прокрутка будет выполняться только в том случае, если это будет совершенно вертикальное прокручивание (без изменения координаты x).

Но я заметил в приложении Inshorts ( Inshorts ), они позволяют смахивать вверх, даже если смахивание не совсем вертикальное. Это делает пролистывание более плавным, поскольку пользователи не всегда могут делать на 100% идеальное смахивание.

Как мы можем этого добиться?

1 Ответ

0 голосов
/ 09 мая 2020

Вы можете использовать ViewPager.PageTransformer.

PageTransformer вызывается всякий раз, когда прокручивается видимая / прикрепленная страница. Это дает приложению возможность применить настраиваемое преобразование к просмотрам страниц с помощью свойств анимации.

 private class VerticalPageTransformer implements ViewPager.PageTransformer {
        private static final float MIN_SCALE = 0.75f;
        @Override
        public void transformPage(View view, float position) {

            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left.
                view.setAlpha(0);

            }  else if (position <= 0) { // [-1,0]
                // Use the default slide transition when moving to the left page
                view.setAlpha(1);
                // Counteract the default slide transition
                view.setTranslationX(view.getWidth() * -position);

                //set Y position to swipe in from top
                float yPosition = position * view.getHeight();
                view.setTranslationY(yPosition);
                view.setScaleX(1);
                view.setScaleY(1);

            } else if (position <= 1) { // [0,1]
                view.setAlpha(1);

                // Counteract the default slide transition
                view.setTranslationX(view.getWidth() * -position);


                // Scale the page down (between MIN_SCALE and 1)
                float scaleFactor = MIN_SCALE
                        + (1 - MIN_SCALE) * (1 - Math.abs(position));
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);

            } else { // (1,+Infinity]
                // This page is way off-screen to the right.
                view.setAlpha(0);
            }
        }
    }

Вы можете использовать VerticalViewPager

...