10

OK! Я пытаюсь сделать это в течение последних нескольких недель и не могу найти подходящего решения, как я могу добиться того, чего хочу. Пробовал с HorizontalScrollView, Галерея (которая устарела).Как создать горизонтальный список прокрутки с эффектом привязки к центру

Теперь я просматриваю RecycleView, потому что я пришел к этому методу .smoothScrollToPosition() и подумал, что это может мне помочь.

Вот иллюстрация того, что я хочу сделать:

enter image description here

Я также должен быть в состоянии создать relativelayouts программно

Можно ли указать мне, как это может быть достигнуто ? Есть ли какой-нибудь родной способ сделать это?

EDIT: посмотрев далее на @CommonsНаше предложение по просмотру ViewPager и commonsware.com/blog/2012/08/20/ третьего сообщения от Dave Smith. Я думаю, что это путь. Havent разрешил его использовать, но он выглядит хорошо.

Я использую образец Dave Smiths из его Github: https://gist.github.com/devunwired/8cbe094bb7a783e37ad1

+3

'ViewPager' можно использовать для этого, в зависимости от ваших целей: https://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html См., В частности, третий вариант: от Дейв Смит, в этом посте. – CommonsWare

+0

Это может быть именно то, что я ищу. –

ответ

4

Не использовать этот подход, он будет использовать для большого количества памяти (если в какой-то момент вы должны распространяться на более общее решение), потому что вы необходимо будет сохранить увеличенное число ViewPager страниц (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 :)
Вот снимок экрана окончательного вывода, например:
enter image description here enter image description here enter image description here

Tak забота.

+0

У вас не получилось, чтобы у меня был код образца Som, который я мог бы использовать? –

+0

https://play.google.com/store/apps/details?id=me.mesmo.app – GuilhE

+0

КПП. Ссылка, которую вы предоставили HorizontalListView, теперь устарела –

Смежные вопросы