Подтвердить что ты не робот

Как сделать мой viewpager салфетки справа налево

У меня есть viewpager, и он содержит некоторую информацию, но он позволяет мне пролистывать страницы слева направо, как я могу заставить его прокручивать слева направо, что означает изменение его направления?

4b9b3361

Ответ 1

Думаю, вы можете установить текущую страницу на последнюю страницу, используя viewPager.setCurrentItem(). Затем он будет прокручиваться влево-вправо..:)

Ответ 2

Это очень простая методика для изменения направления прокрутки в Viewpager.

Есть два простых шага, которые должны следовать за вами,

1. Измените поворот пейджера View,

viewpager.setRotationY(180);

2. Затем снова измените направление контейнера фрагмента, являющегося дочерним элементом viewpager,

recyclerView.setRotationY(180);

Примечание: В моем случае я использовал recyclerview как дочерний элемент пейджера представления.

Это 100% работает для меня.

Ответ 3

Вы можете провести в обоих направлениях уже. По умолчанию отображается нулевая страница, но вы можете изменить это:

protected void onCreate(Bundle savedInstanceState) {
    // ...
    viewPager.setCurrentItem(myFragmentCount-1); 
    // ...

Ответ 4

Я уверен, что это не относится к op, но я нашел решение, которое сработало для меня (поскольку изменение данных было проблемой для моего случая). Я просто повернул viewpager на 180 градусов по оси Y, а затем повернул его снова в 180 раз.

android.view.View

public void setRotationY(float rotationY)

Надеюсь, это помогло кому угодно, поскольку я думаю, что это самое близкое к тому, как Android отражает все ОС, когда они меняются на язык rtl.

Ответ 5

Вы можете сделать что-то вроде этого,

ViewPager.setCurrentItem(lastposition);

Ответ 6

Сначала вам нужно реализовать OnPageChangeListener в своем классе и второй установить слушателя на ваш просмотрщик, как  viewpager.setOnPageChangeListener(yourclass.this); Надеюсь, это сработает.

Ответ 7

мое решение. динамически:

public class RTLViewPager extends ViewPager {

    public RTLViewPager(Context context) {
        super(context);
    }

    public RTLViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setAdapter(PagerAdapter adapter) {
        super.setAdapter(adapter);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            if(getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL){
                setCurrentItem(adapter.getCount()-1);
            }
        }
    }
}

Ответ 8

Его работа для меня идеально.

  • Измените поворот пейджера View,

viewpager.setRotationY(180);

  1. Затем снова измените направление контейнера фрагмента, являющегося дочерним элементом viewpager,

recyclerView.setRotationY(180);

Примечание. В моем случае я использовал recyclerview как дочерний элемент пейджера представления.

Я использовал viewPager.setCurrentItem() в последнем индексе, но не работал у меня.

Ответ 9

Я знаю, что этот вопрос старый, но вот моя версия вещей:

Для того, чтобы ваш viewpager проводил RTL, независимо от того, есть ли в нем фрагменты или представления, вам нужно сделать следующее

Шаг 1: определить целое число: R.integer.angle_rotation_for_rtl

для values это 0

а для values-rtl это 180

шаг 2:

viewPager.setRotationY(getResources().getInteger(R.integer.angle_rotation_for_rtl)); 

шаг 3:

   viewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(@NonNull View page, float position) {
                page.setRotationY(getResources().getInteger(R.integer.angle_rotation_for_rtl));

            }
        });

И результат - слаженно работающий видоискатель, без лишних ifs

Ответ 10

Не используйте ротацию с ViewPager, если вы поддерживаете API28 и выше, потому что это делает просмотр ViewPager слишком сложным на круговой платформе Android, см. Этот вопрос setRotationY (180) при повторном просмотре в программе повторного просмотра или просмотра ViewPager в Android 9 (API 28). Эта библиотека помогла мне реализовать RTL ViewPager https://github.com/duolingo/rtl-viewpager

Добавьте его в зависимости и просто убедитесь, что вы добавили layoutDirection = "locale" в RtlViewPager

<com.duolingo.open.rtlviewpager.RtlViewPager
        android:layoutDirection="locale"
        android:keepScreenOn="true"
        android:id="@+id/quranViewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true"
     />

Обновить

ViewPager2 дружественен к локали, поэтому он автоматически изменит направление пролистывания в соответствии с текущей локалью устройства.

Некоторые полезные ссылки по реализации ViewPager2:

Документы для Android

Образец

Ответ 11

Чтобы позволить вашему горизонтальному ViewPager вести себя как RecyclerView при изменении LayoutDirection, просто добавьте этот метод в ваш пользовательский ViewPager;

public class LoopViewPager extends ViewPager {
....
...
    public void setLayoutDirection(int layoutDirection) {
        if(layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
            setRotationY(0);
        }
        else if(layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL) {
            setRotationY(180);
    }
}

и где вы используете ваш viewPager, установите его динамически, как это;

viewPager.setLayoutDirection(context.getResources().getConfiguration().getLayoutDirection());

Ответ 12

Я полностью понимаю, что на вопрос дан ответ совершенно; но если вы используете язык RTL; например, если у вас есть книга, которую вы хотите показать в ViewPager; затем, помимо ответа, вы можете также перевернуть страницы, чтобы получить нужную страницу; для этого измените метод вашего адаптера ViewPager getItem()

@Override
public Fragment getItem(int position) {
    return SomeFragment.newInstance(N_PAGES - position - 1); // to filp the pages
}