Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Размещение нескольких элементов в видимой области ViewPager

#android #xml #android_viewpager


Есть данный макет. Область на которой находятся Card'ы. При свайпе справа-налево
должны отображться следующие 2 элемента. Я делаю это с помощью ViewPager, но проблема
в том, что ViewPager размещает по одному элементу в видимую область. Как решить эту
проблему?




    


Ответы

Ответ 1



Не претендую на завершенное решение, но кажется должна сработать такая идея. Все карды кладутся в горизонтальный LinearLayout, который оборачивается в HorizontalScrollView: Это даст нам возможность скроллить карды по горизонтали. Теперь нужно изменить ширину кардов так, чтобы на экран помещалось два карда. Для этого можно, например, унаследоваться от Card и переопределить onMeasure: public class MyCard extends Card { // … @Override protected void onMeasure(int widthMeasureSpec, final int heightMeasureSpec) { final View parentScrollView = ((View)(getParent().getParent())); if (parentScrollView != null) { if (parentScrollView instanceof HorizontalScrollView) { widthMeasureSpec = parentScrollView.getMeasuredWidth() / 2; } } setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); } } Останется по событию скролла вычислить ближайшую позицию скролла, в которой на экране будут отображаться два карда целиком и вручную доскроллить через HorizontalScrollView.fullScroll(…).

Ответ 2



В адаптере переопредели метод getCount, чтобы он возвращал половину от размера твоего списка. private class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return Fragment1.newInstance(position); } @Override public int getCount() { return (int) (myList.size()/2); } } А в самом фрагменте в методе onCreateView, из полученной позиции, возьмешь два элемента из списка. Допустим у тебя страница 3, соответственно возьмешь элементы 5 и 6 из списка.

Комментариев нет:

Отправить комментарий