Есть ли возможность отображать две страницы одновременно при использовании ViewPager
? Я не ищу краевой эффект, а скорее для двух полных страниц в то же время.Несколько страниц одновременно на ViewPager
Заранее спасибо.
Есть ли возможность отображать две страницы одновременно при использовании ViewPager
? Я не ищу краевой эффект, а скорее для двух полных страниц в то же время.Несколько страниц одновременно на ViewPager
Заранее спасибо.
Я не думаю, что это возможно с ограничениями на просмотр пейджера. Он позволяет пользователю одновременно просматривать страницы 1. Возможно, вы сможете что-то сделать с использованием фрагментов, а также иметь 2 фрагмента ViewPager рядом и использовать кнопки для разработки страницы, которую вы хотите реализовать, но код может стать очень сложным.
Вы можете попробовать что-то вроде ViewFlipper - где вы можете сделать намного больше настроек (включая анимацию).
Надеюсь, это поможет.
Просьба ознакомиться с методом getPageWidth
в соответствующем PagerAdapter
. Переопределите его и верните, например. 0.8f
, чтобы все дочерние страницы охватывали только 80% ширины ViewPager.
Подробнее: http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)
проблема с этой техникой заключается в том, что появляется дополнительное поле, добавляющее странное пустое пространство под Viewpager – elgui
Я думаю, что это лучший ответ! –
Это добавляет некоторый мерцающий эффект на пейджер представления, я все еще могу провести пальцем и видеть, что виды видят странное мерцание. – pyus13
См that blog entry.
Техника PagerContainer решена моя проблема.
EDIT:
я нашел такой же ответ.
How to migrate from Gallery to HorizontalScrollView & ViewPager?
Добро пожаловать в StackOverflow! Вы хотите добавить отрывок из этой записи в свой ответ, чтобы он по-прежнему был полезен, если ссылка умирает? –
@ S.L.Barth Спасибо за ваш совет. Я изменил свой ответ. – kaw
Вы можете решить эту проблему, используя getPageWidth в классе PagerAdapter.
Будьте уверены ли ваш JAR является уточненный .Since ранее ViewPager не было поддержки нескольких страниц одновременно.
общественный поплавок getPageWidth() {
возвращение 0.4f; (Вы можете выбрать его .Дль всего экрана на страницу, вы должны дать 1f) }
Смотрите мои более уточненный ответ здесь: Can ViewPager have multiple views in per page?
Я обнаружил, что возможно даже более простое решение, указав отрицательный запас для ViewPager. Я создал проект MultiViewPager на GitHub, который вы можете захотеть взглянуть на:
Хотя этот вопрос конкретно просит решение без краевого эффекта, некоторые ответы здесь предлагают обходное решение 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
размерности.)
Мы реализовали этот in the Dutch newspaper app De Telegraaf Krant:
Мне понравилось ваше решение. Простой и элегантный ...! Спасибо чувак. Я пытался достичь этого, используя 'PageTransformer'. –
работал для меня.Вам также необходимо добавить setOffScreenPageLimit (2), чтобы улучшить кеширование до 2, чтобы избежать отставания во втором следующем представлении. – Giorgio
В предыдущем примечании: это ViewPager.setOffscreenPageLimit (2), если кто-то отбрасывается. – fooser
Вы должны переопределить getPageWidth()
метод на адаптер для просмотра. Пример:
@Override
public float getPageWidth(int position) {
return 0.9f;
}
Пробуйте этот код в вашем адаптере, а затем вы поймете.
Это очень похоже на ответ @ Markus-Wörz? – bummi
создать файл макета: 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>
ViewPager примерно так же мал, как вы хотите, чтобы ваши страницы, чтобы быть. С андроидом: 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);
}
});
Это может быть дон в Item Layout в ViewPager. Предположим, что вам нужно две страницы за раз.
Это Пункт Layout (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;
}
Я не совсем уверен, что вы asking..can вас объясните немного больше? – Cody
Я хочу, чтобы ViewPager отображал две доступные страницы рядом, как книгу. –
Вы могли бы использовать два фрагмента для достижения побочных эффектов страниц? его просто идея ... не обвиняйте меня ..... – NIPHIN