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

Несколько страниц одновременно на ViewPager

Есть ли возможность отображать две страницы одновременно при использовании ViewPager? Я не ищу краевой эффект, а скорее для двух полных страниц одновременно.

Спасибо заранее.

4b9b3361

Ответ 2

См. мой более свежий ответ здесь: Может ли ViewPager иметь несколько просмотров на странице?

Я обнаружил, что возможно даже более простое решение, указав отрицательный запас для ViewPager. Я создал проект MultiViewPager на GitHub, который вы можете посмотреть на:

https://github.com/Pixplicity/MultiViewPager

Хотя этот вопрос специально требует решения без эффекта края, некоторые ответы здесь предлагают обходное решение CommonsWare, такое как предложение kaw.

Существуют различные проблемы с сенсорным управлением и аппаратным ускорением с этим конкретным решением. Более простым и более элегантным решением, на мой взгляд, является указание отрицательного поля для ViewPager:

ViewPager.setPageMargin(
    getResources().getDimensionPixelOffset(R.dimen.viewpager_margin));

Затем я указал это измерение в моем dimens.xml:

<dimen name="viewpager_margin">-64dp</dimen>

Чтобы компенсировать перекрывающиеся страницы, каждый просмотр содержимого страницы имеет противоположный край:

android:layout_marginLeft="@dimen/viewpager_margin_fix"
android:layout_marginRight="@dimen/viewpager_margin_fix"

Опять в dimens.xml:

<dimen name="viewpager_margin_fix">32dp</dimen>

(Обратите внимание, что размер viewpager_margin_fix равен половине размера абсолютного viewpager_margin.)

Мы применили этот в приложении для голландской газеты De Telegraaf Krant:

Phone example in De Telegraaf KrantTablet example

Ответ 3

Вы должны переопределить метод getPageWidth() в адаптере viewpager. Например:

@Override
public float getPageWidth(int position) {
    return 0.9f;
}

Попробуйте этот код в вашем адаптере, а затем вы поймете.

Ответ 5

Вы можете решить эту проблему, используя getPageWidth в классе PagerAdapter.

Убедитесь, что ваш JAR обновлен. Поскольку ранее ViewPager не поддерживал несколько страниц одновременно.

public float getPageWidth() {

return 0.4f; (Вы можете выбрать его. Для полного экрана на странице вы должны дать 1f) }

Ответ 6

создайте файл макета: my_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<FrameLayout
    android:id="@+id/pager_container"
    android:layout_width="match_parent"
    android:layout_height="240dp"
    android:clipChildren="false">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="200dp"
        android:clipToPadding="false"
        android:layout_height="200dp"
        android:layout_marginLeft="70dp"
        android:layout_marginRight="70dp"
        android:layout_gravity="center" />
</FrameLayout>
</layout>

просмотрщик примерно такой же маленький, как вы хотите, чтобы ваши страницы были. С андроидом: clipToPadding = "false" также отображаются страницы за пределами пейджера. Но теперь перетаскивание за пределы viewpager не имеет эффекта. Это можно устранить, выбирая штрихи из контейнера пейджера и передавая их на пейджер:

MyLayoutBinding binding = DataBindingUtil.<MyLayoutBinding>inflate(layoutInflater, R.layout.my_layout, parent, false)
binding.pager.setOffscreenPageLimit(3);
binding.pager.setPageMargin(15);
binding.pagerContainer.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
           return chatCollectionLayoutBinding.pager.onTouchEvent(event);
      }
 });

Ответ 7

Это может быть указано в Макет элемента для Viewpager. Предположим, что вам нужны две страницы за раз.

Это Макет элемента (photo_slider_item.xml):

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/photosSliderItem">
        <ImageView android:id="@id/photoBox1" style="@style/photoBox"/>
        <ImageView android:id="@id/photoBox2" style="@style/photoBox"/>
    </LinearLayout>

И в вашем PagerAdapter:

@Override
public View instantiateItem(ViewGroup container, int position){
    View sliderItem = LayoutInflater.from(container.getContext()).inflate(photo_slider_item, container, false);
    ImageView photoBox1 = (ImageView) sliderItem.findViewById(R.id.photoBox1);
    ImageView photoBox2 = (ImageView) sliderItem.findViewById(R.id.photoBox2);
    photoBox1.setImageResource(photosIds[position]);
    if(position < photosIds.length-1){
        photoBox2.setImageResource(photosIds[position+1]);
    } else {photoBox2.setImageResource(photosIds[0]);}
    container.addView(sliderItem);
    return sliderItem;
}

Ответ 8

Я не думаю, что это возможно с ограничениями View Pager. Он позволяет пользователю одновременно просматривать страницы 1. Возможно, вы сможете что-то сделать с использованием фрагментов, а также иметь 2 фрагмента ViewPager рядом и использовать кнопки для выверки страницы, которую вы хотите реализовать, но код может стать очень сложным.

Вы можете попробовать что-то вроде ViewFlipper - где вы можете сделать намного больше настроек (включая анимацию).

Надеюсь, это поможет.