Garland View – Seamlessly Transitions Between Multiple Lists of Content

Garland View seamlessly transitions between multiple lists of content. Made by @Ramotion (Alex Mikhnev)


Ramotion provides programming of advanced UI for websites and mobile apps

Requirements of garland-view

  • iOS 10.0
  • Xcode 9
  • Swift 4.0

How to install garland-view on iOS?

You can install garland-view in several ways:

  • Add source files to your project.
  • Use CocoaPods:
pod 'garland-view'
github "Ramotion/garland-view"

Usage of Garland View

Garland view can be used directly or by subclassing GarlandViewController. In both variants you need to implement UICollectionViewDataSource and UICollectionViewDelegate protocols.

let nib = UINib(nibName: "CollectionCell", bundle: nil)
garlandCollection.register(nib, forCellWithReuseIdentifier: "Cell")
garlandCollection.delegate = self
garlandCollection.dataSource = self

Control can be user with or without header view.

Use setupHeader(:UIView) to customize collection header. Use GarlandConfig to make your custom configuration.

Take a look at the Example project for an integration example.

Garland View for iOS / Android


Check Garland View for Android:

Requirements of garland-view

  • Android 4.4 KitKat (API lvl 19) or greater
  • Your favorite IDE

How to install garland-view on Android?

Just download the package from here and add it to your project classpath, or just use the maven repo:


compile 'com.ramotion.garlandview:garland-view:0.3.2'


libraryDependencies += "com.ramotion.garlandview" % "garland-view" % "0.3.2"



Basic usage

GarlandView consists of classes for inner items that are scrolled vertically and outer items that are scrolled horizontally, and each of which contains one inner item.

First of all, you need to implement the classes necessary to create internal items: InnerItem and InnerAdapter.

InnerAdapter is an abstract class inherited from RecyclerView.Adapter. It works only with InnerItem – ViewHolder.

In InnerItem, you need to override the getInnerLayout method, which must return the main layout of the inner item.

Next, you need to override the classes required for external items: HeaderItem andHeaderAdapter.

HeaderAdapter is an abstract class inherited from RecyclerView.Adapter, It works only with HeaderItem – ViewHolder.

In HeaderItem, you need to redefine 4 methods:getHeadergetHeaderAlphaView,isScrollinggetViewGroup. The method getViewGroup should return InnerRecyclerView. The isScrolling method must return the InnerRecyclerView’s scrolling state. The getHeaderAlpha method should return an alpha-layout, which will be used for dimming (hiding header’s views). The getHeader method must return the main layout of the header, an outer item.

Finally, place TailRecyclerView in the Activity’s layout. Next, create a TailLayoutManager and specify it as a LayoutManager for TailRecyclerView.

Here are the attributes of TailRecyclerView you can specify in the XML layout:

  • itemStart – Outer item left and right offset size.
  • itemGap – Distance between outer items.


Garland view is released under the MIT license.

Project website: