У меня есть viewpager, и он содержит некоторую информацию, но он позволяет мне пролистывать страницы слева направо, как я могу заставить его прокручивать слева направо, что означает изменение его направления?
Как сделать мой viewpager салфетки справа налево
Ответ 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);
- Затем снова измените направление контейнера фрагмента, являющегося дочерним элементом 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:
Ответ 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
}