#mobile_dev #android #kotlin
Хочу такой барабан, как на iPhone
Спорить о юзабилити стандартных элементов управления мобильных ОС можно вечно. Мы не будем.
В рамках дизайна или по требованию клиента нам приходится реализовывать различного рода Picker
, которые служат основой для барабанов, слайдеров и каруселей.
На «Хабре» есть статья, которая рассказывает, как создавать Picker
через Canvas
. Такой подход имеет ряд недостатков. Например, сложность реализации анимированной плавной прокрутки с ускорениями и необходимость реализации метода onDraw
для однотипных, но разных интерфейсов.
Реализуем вариант бесконечного барабана через SnapHelper
. Picker
будет оперировать списком строк List<String>
, который передается в конструктор адаптера для RecyclerView. Количество элементов в этом RecyclerView
будет Integer.MAX_VALUE
. За счет этого мы добьемся «бесконечной» прокрутки списка.
Для реализации эффекта барабана при прокрутке определим класс SlideLayoutManager. Метод onScrollStateChanged
, помимо вызова суперметода, для каждого элемента вычисляет расстояние до центра RecyclerView
и возвращает позицию элемента с минимальным расстоянием. Метод scrollVerticallyBy
с помощью функции scaleDownView
производит корректировку визуальных составляющих элементов, например размера и цвета.
Пример инициализации Picker
можно увидеть здесь.
Реализацию XML-разметки picker_item
, а также размещение RecyclerView
в разметке Layout
оставим за кадром этой заметки.
Оперируя различными визуальными эффектами, можно изменять внешний вид и поведение нашего барабана.