#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 из списка.
Комментариев нет:
Отправить комментарий