Ответ 1
Похоже, что более свежие версии пакета поддержки (начиная с версии 5) добавили поддержку полей между страницами ViewPager
через setPageMargin()
и setPageMarginDrawable()
.
Я использую новый ViewPager
-view из библиотеки совместимости Android, и я не могу понять, как получить отступы между страницами, чтобы при прокручивании между ними появилась видимая граница.
Моя ширина ViewPager
установлена на fill_parent
, поэтому она занимает всю ширину дисплея. Я могу получить эту границу между страницами, установив android:padding
в ViewPager
, но у этого есть добавленный (нежелательный) эффект уменьшения видимого размера страницы, когда она полностью отображается.
Я предполагаю, что мне нужно, чтобы каким-то образом представить границу за пределами ширины представления, если это даже имеет смысл...
Новый Android Market делает это так, как мне бы хотелось, но я просто не могу понять, как это произошло.
Похоже, что более свежие версии пакета поддержки (начиная с версии 5) добавили поддержку полей между страницами ViewPager
через setPageMargin()
и setPageMarginDrawable()
.
В настоящее время нет способа сделать это в макете XML, но вы можете использовать следующие функции в java:
setPageMargin(int marginPixels)
setPageMarginDrawable(drawable d)
setPageMarginDrawable(int resId)
Сначала вам нужно перенести пейджер с вашего XML-макета:
ViewPager pager = (ViewPager) findViewById(R.id.pager);
Это будет небольшая работа, но вы можете добиться желаемого эффекта с помощью элемента интерфейса границы, который затем продолжит анимацию с экрана с той же скоростью, что и при прокрутке.
например. скажите, что вы стреляете прямо влево:
1) Страница, которая появляется для просмотра, имеет дополнительный пограничный элемент на левом краю по умолчанию.
2) Вы отслеживаете салфетки, реализуя ViewPager.OnPageChangeListener()
с помощью настраиваемого метода onPageScrolled()
. Вычислите также скорость салфетки здесь.
3) Когда левая сторона левой руки попадает в левый край экрана, начните анимировать элемент границы слева с той скоростью, которую вы вычислили.
... Подумав об этом, я думаю, что иллюзия была бы более эффективной, если бы вы анимировали пограничный элемент, который был переведен слева от него шириной на протяжении всего времени прокрутки. Это звучит странно, но как только вы его видите, это будет иметь смысл:)
Источник для ViewPager доступен с помощью совместимых библиотек android v4.
/**
* This method will be invoked when the current page is scrolled, either as part
* of a programmatically initiated smooth scroll or a user initiated touch scroll.
*
* @param position Position index of the first page currently being displayed.
* Page position+1 will be visible if positionOffset is nonzero.
* @param positionOffset Value from [0, 1) indicating the offset from the page at position.
* @param positionOffsetPixels Value in pixels indicating the offset from position.
*/
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);