Как сделать карусель android studio

Bagus Aji Santoso

Jan 5, 2018 · 3 min read

Carousel is a component to show the users a slideshow, usually images. In Android, we can easily create this component using an open-source library called CarouselView.

Create a New Project

First, let’s create a new project and add this dependency to the newly created project.

Prepare the Images

Now, we need images for our carousel, so choose your own images or grab the examples from here. Save the images in res > drawable so that we have:

XML Layout

After the dependency added and all the images are ready, now let’s create the layout. I assume you create a new project with Basic Activity template, so open content_main.xml and change it’s content to:

  • com.synnapps.carouselview.CarouselView is the View name to show the carousel. It can be written only after adding the dependency above.
  • app:fillColor is the property name to choose the fill color for the circle to show which image position is shown.
  • app:radius is the property to choose the circle’s size.
  • app:slideInterval is the property to choose the time interval before moving the next image.
  • app:strokeColor is the property to choose the stroke color of the circle.
  • app:strikeWidth is the property name to choose the width of the circle.

MainActivity

Now, let’s move to Java file. Open MainActivity and change it’s content to:

Inline four we create a new object typed CarouselView

  • Inline five we create an array of int to store images id that we added in res > drawable
  • Inline fourteen we do findViewById() like always
  • Inline fifteen we choose the number of the images using length method of the array of sampleImages
  • Inline sixteen we call setImageListener which will do the work of running the slideshow based on listener we create inline 28-33

Or, if you want it in Kotlin:

You can also use Picasso to load images from URL (don’t forget to add INTERNET permission and the Gradle dependency):

Run the App

Now, let’s run this app and make sure everything works.

Error java.lang.OutOfMemoryError

When I run my app for the first time I got Error java.lang.OutOfMemoryError. It seems that the images are taking too many memories. So, I search the error and I found that adding these two lines to application tag in AndroidManifest.xml will make the app work:

Conclusion

With the help of CarouselView, we can easily add image slideshow in the Android app. So, if you want to know more about the library, visit sayyam/CarouselView in Github or you can also see my code here (the library also have the sample which is better)

Источник

Создаём горизонтальный слайдер с изображениями для Android без единой строки кода

Во многих Android приложениях можно встретить такой приём как просмотр изображений при помощи их перелистывания. Когда каждое из нескольких изображений располагается как бы на отдельном экране.

Существует достаточно много способов реализации для этого. Сегодня мы рассмотрим способ, который не требует написания ни одной строки кода на Java. Всё будет сделано при помощи XML разметки.

Читайте также:  Layout swiping in android

Основой для слайдера будет служить виджет HorizontalScrollView. В качестве примера расположим его внутри ConstraintLayout и зададим привязки таким образом, чтобы HorizontalScrollView был растянут по размеру контейнера (параметры привязки в примере кода в конце статьи).

У вложенного в HorizontalScrollView LinearLayout задаём ориентацию horizontal (по умолчанию установлено vertical) чтобы изображения располагались по горизонтали. А, внутри этого LinearLayout помещаем несколько ImageView с изображениями из ресурсов программы.

Для того чтобы изображения в слайдере отображались и перелистывались корректно у каждого ImageView устанавливаем следующие параметры: layout_width – WRAP_CONTENT, layout_height – MATCH_PARENT, adjustViewBounds – true.

Параметр adjustViewBounds необходим если для слайдера планируется использовать изображения в высоком разрешении. В противном случае между изображениями могут появиться пробелы.

Собственно, теперь слайдер готов. Важно отметить, что все вышеописанные действия выполнены полностью без написания программного кода на Java. Для создания подобного слайдера вполне достаточно работы с XML разметкой в текстовом или визуальном редакторе.

В завершение приведём код слайдера, созданного в рамках данной статьи.

Источник

Android programmers blog

Simply about difficult

Поиск по этому блогу

вторник, 20 марта 2018 г.

Кастомная CarouselView в домашних условиях

Очень давно ничего не писал, как всегда куча проектов и куча времени уходит на работу, но тут выдался свободный часок и я решил написать по быстрому заметку об карусели которую я как-то реализовывал в одном проекте.

Для реализации карусели я использовал готовую библиотеку CarouselView но немного ее изменив.

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

В общем начнем делать нашу карусель. Добавляем несколько библиотек в build.gradle.

Тут мы добавили ButterKnife для подгрузки вьюх, Picasso для загрузки картинок и CarouselView для карусели. Дальше нам нужно написать собственный класс «трансформатор» который будет создавать 3Д эффект.

Тут очень сложная математика происходит, я не уверен что я сам понял что сделал, но в целом постараюсь описать логику. Все настройки для работы карусели у нас находятся в самом верху класса в переменных mNumPies, mPieRad, mHorizontalViewPort, mViewPerspective и mFarScale.
mNumPies — количество айтемов на экране.
mPieRad — с его помощью мы расчитываем количество айтемов.
mHorizontalViewPort — горизонтальная перспектива для отображения айтемов.
mViewPerspective — вертикальная перспектива с которой будут отображаться айтемы.
mFarScale — как далеко они будут находиться друг от друга.

В самом верху метода transform() мы получаем размеры вьюхи что бы поместить на нее нашу горзинтально скролящийся RecyclerView. Дальше по формуле элипса мы раскладываем перспективу

x(t) = a cos t
y(t) = b sin t
where t ∈ [0, 2π]
Далее у нас размер будет зависеть от mViewPerspective, то есть если мы поставим не -0.6, а на пример 1 — скейл увеличится и будет так что картинки будут по бокам будут больше чем центральная. Дальше переставляем центральную позицию айтема так что бы он был y

∈ [-maxY/2, maxY/2]
то есть по центру главный и по бокам все остальные элементы списка. Дальше задаем все эти данные для перемещения по x и y, и для размера на экране. По этому классу все.

Дальше нам нужно создать адаптер что бы он отображал наши картинки которые мы хотим отображать.

Тут все стандартно, мы создали адаптер, в нем указали какой леяут будем использовать для отображения вью, дальше присвоили каждому айтему картинку по позишену и собственно все.

Добавляем на наш айтем ImageView, размером 100 по ширине и 150 по высоте, что бы был как постер. И дальше собираем все это до кучи в нашем MainActivity. XML для MainActivity будет выглядеть тоже очень просто.

Читайте также:  Очистка андроида от обновления

По сути просто разместили карусель вью на экране для использовани в дальнейших извращениях.

В onCreate() мы задали список картинок, дальше передали этот список в адаптер, потом задали этот адаптер в карусель вью и задали наш трансформер FlatMarryGoRoundSyndTransformer для карусели, который мы только вот написали. Ну и присвоили onClick метод для карусели.

И не забываем добавить пермишены для доступа в интернет что бы картинки подгрузились.

И вот так вот мы смогли сделать красивенькую карусель для отображения картинок в приложении. Возможно это будет кому-то полезно.

Исходники:
GitHub

Источник

Как сделать карусель android studio

A simple yet flexible library to add carousel view in your android application.

Include following code in your layout:

Include following code in your activity:

If you want to add custom view, implement ViewListener .

If you’d like to receive touch events for each image

If using ProGuard add this line to your proguard-rules.pro:

Supported xml Attributes

Attribute Description Values
app:slideInterval Interval per page in ms. integer
app:indicatorGravity Gravity of the indicator. (Just like layout_gravity) gravity
app:indicatorOrientation Orientation of the indicator. [horizontal, vertical]
app:indicatorVisibility Set visibility of indicator. [visible,invisible,gone]
app:fillColor Color of the filled circle that represents the current page. color
app:pageColor Color of the filled circles that represents pages. color
app:radius Radius of the circles. This is also the spacing between circles. dimension
app:snap Whether or not the selected indicator snaps to the circles. boolean
app:strokeColor Width of the stroke used to draw the circles. color
app:autoPlay Whether or not to auto play. Default: true boolean
app:disableAutoPlayOnUserInteraction Disables autoPlay when user interacts. Default: false boolean
app:indicatorMarginHorizontal Sets horizontal margin for Indicator in Carousel View dimension
app:indicatorMarginVertical Sets vertical margin for Indicator in Carousel View dimension
app:pageTransformInterval Sets speed at which page will slide from one to another in ms. integer
app:pageTransformer Sets page transition animation. [zoom,flow,depth,slide_over]
app:animateOnBoundary Sets whether to animate from last page. Default: true boolean

Note: Add xmlns:app=»http://schemas.android.com/apk/res-auto» in your layout’s root view.

  • Sayyam Mehmood
  • Muhammad Rehan

This library uses code snippet from Jake Wharton’s ViewPagerIndicator to display page indicator.

Источник

Как создать прокручиваемую страницу карусели в Android?

Я пытаюсь создать пользовательский интерфейс для моего приложения Android, который содержит вертикально прокручиваемую страницу горизонтально прокручиваемых каруселей (что-то вроде того, что делает приложение Netflix). Как осуществляется такой тип поведения?

базовой реализации было бы достаточно, чтобы я начал. Есть несколько других требований к пользовательскому интерфейсу, которые я включу здесь для справки, так как это может повлиять на то, какие классы или библиотеки я могу использовать.

1) вертикальная прокрутка между каруселями должно быть гладко, но когда пользователь выпускает, пользовательский интерфейс должен «привязаться» к ближайшей карусели (поэтому пользователь всегда находится в строке карусели, а не между двумя каруселями).

2) горизонтальная прокрутка на карусели должна быть гладкой, но когда пользователь выпускает, пользовательский интерфейс должен «привязаться» к ближайшему элементу в карусели.

3) должна быть возможность наложения дополнительной информации на элемент в карусель!—6—>

4) пользовательский интерфейс должен быть адаптирован к любому размеру экрана.

5) должен быть судоходным с помощью клавиш со стрелками (для устройств без сенсорного экрана)

6) должен работать на широком диапазоне версий Android (возможно, через библиотеку поддержки)

7) должно быть нормально использовать в приложении с открытым исходным кодом, лицензированном под GPL

приемлемые ответы не должны соответствовать всем все эти требования. Как минимум, хороший ответ должен включать навигацию по нескольким каруселям (против только одной карусели).

вот макет в основном того, что я представляю (я гибкий, не должен выглядеть так.. дело в том, чтобы уточнить, о чем я говорю-каждая строка будет содержать много элементов, которые можно прокручивать влево и вправо, а всю страницу можно прокручивать вверх и вниз)

6 ответов

Основная Идея

для того, чтобы иметь гибкий дизайн и наличие неограниченное количество элементов вы можете создать RecyclerView как корневое представление с LinearLayoutManager.VERTICAL как LayoutManager . для каждой строки можно поставить другую RecyclerView но теперь с LinearLayoutManager.HORIZONTAL как LayoutManager .

результат

источник

требования

1) вертикальная прокрутка между карусели должны быть гладкими, но когда пользовательские релизы, пользовательский интерфейс должен «привязаться» к ближайшей карусели (так что пользователь всегда находится на карусели, а не между двумя каруселями).

2) горизонтальная прокрутка на карусели должна быть гладкой, но когда пользователь выпуски, пользовательский интерфейс должен «привязаться» к ближайшему элементу в карусели.

для того, чтобы достичь тех, которые я использовал OnScrollListener и когда состояния идут SCROLL_STATE_IDLE я проверяю вид сверху и снизу, чтобы увидеть, какой из них имеет более видимую область, затем прокрутите до этой позиции. для каждой строки я делаю это для левого и правого представлений для каждого адаптера строки. Таким образом, всегда одна сторона ваших каруселей или рядов подходит. например, если верх установлен, то низ нет или наоборот. Я думаю, если вы играете немного больше, вы можете достичь этого, но вы должны знать размер окна и изменить размер карусели во время выполнения.

3) должна быть возможность наложения дополнительной информации на элемент в карусель!—15—>

если вы используете RelativeLayout или FrameLayout в качестве корневого представления каждого элемента вы можете поместить информацию друг на друга. как вы можете видеть цифры на верхней части изображения.

4) пользовательский интерфейс должен быть адаптирован к любому размеру экрана.

если вы знаете как поддерживают несколько размеров экрана, вы можете сделать это легко, если вы не знаете, не читали документ. Поддержка Нескольких Экранов

5) Должен быть судоходным с помощью клавиш со стрелками (для сенсорного экрана-менее устройства)

использовать ниже функция

6) должен работать на широком диапазоне версий Android (возможно, через библиотека поддержки)

импорт android.поддержка.В7.штучка.RecyclerView;

7) должно быть нормально использовать в приложении с открытым исходным кодом, лицензированном под GPL

Ok

удачи в кодировании!!

вы можете использовать ListView с пользовательским OnTouchListener (для привязки элементов) для вертикальной прокрутки и TwoWayGridView снова с пользовательским OnTouchListener (для привязки элементов)

main.в XML

list_item_hgrid.в XML

и код действия будет примерно следующим

и вот тестовые адаптеры

Попробуйте ViewPager. этой документация.

Я бы предложил вид Recycler.

вы можете создать горизонтальный и вертикальный список или gridviews и. На мой взгляд, viewpager может иногда усложняться.

Я работаю над приложением video on demand, и это спасло меня.

в вашем случае это будет легко установить. Я дам тебе код.

вам понадобится следующее:
XML-представление — где объявляется макет корзины.
Адаптер-вам понадобится вид на заполните адаптер и заполните recycleview.

создание вида

объявите это, где вы хотите, чтобы карусель отображалась.

Далее вы хотите создать адаптер:

здесь вы вводите данные в адаптер для заполнения каждого элемента карусели.
наконец объявите его и вызовите адаптер:

вы можете создать listview с recycle views для достижения того, что вы хотите.
Этот класс отлично подходит для плавной прокрутки и оптимизации памяти.

Это ссылка на него:

Я надеюсь, это поможет вам.

можно использовать ScrollView как родитель, что внутри ScrollView место Vertical LinearLayout на for loop надуть макет, который состоит coverflow на эффект карусели

Источник

Читайте также:  Android studio sqlite пример
Оцените статью