Ответ 1
Не используйте этот подход, он будет использовать много памяти (если в какой-то момент вам нужно будет перейти к более универсальному решению), потому что вам нужно будет сохранить повышенное число ViewPager
Pages (Fragment
) в памяти. У меня была такая же задача, и я сделал это с помощью HorizontalListView.
Итак, вам нужно создать Adapter
, который добавит "заглушки" View
, чтобы получить первую или последнюю (может быть больше в зависимости от желаемых видимых просмотров в одно и то же время), в центре экран, так как это ListView
.
Для эффекта привязки вы можете использовать что-то вроде этого (все предметы должны иметь равные размеры):
View.OnTouchListener hListViewsOnTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP && v instanceof HListView) {
View c = ((HListView) v).getChildAt(0);
int posToGo = Math.abs(c.getX()) < c.getWidth() / 2 ? ((HListView) v).getFirstVisiblePosition() : ((HListView) v).getFirstVisiblePosition() + 1;
((HListView) v).smoothScrollToPositionFromLeft(posToGo, 0);
}
return false;
}
};
Этот подход использует не только меньше памяти, но и общий размер числа дочерних представлений, он более плавный, и все элементы являются кликабельными (а не только центрированными)... ну это ListView
:)
Вот скриншот финального выходного примера:
Позаботьтесь.