Open-source project
zhpanvip/BannerViewPager avatar
zhpanvip/BannerViewPager

BannerViewPager split its indicator out, and left the documentation in a wiki

An awesome banner view for Android, based on ViewPager2. Simple and efficient: implement a looping carousel in one line of code, switch between one, two or three pages per screen, and choose from many indicator styles.

3,774 stars466 forksJavaApache-2.0

At a glance

What is it?
zhpanvip/BannerViewPager is an Android carousel built on a paging library, and the readme is a table of contents rather than a manual: five wiki pages carry the quick start, the API, the view types, the data-binding integration and the custom indicator. The structural news is that the indicator code now lives in its own repository.
Who is it for?
BannerViewPager suits an Android project that needs a carousel with multiple visible pages and a configurable indicator, and that is willing to read a wiki rather than a manual. It does not suit a project that wants one artifact, since the indicator ships separately.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Activity is slowing. The repository last received commits 8 months ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • zhpanvip/BannerViewPager3,774 ★ · -4
Star history
Repository2026-09-242026-11-14
zhpanvip/BannerViewPager3.8k3.8k

-4 Stars in the last 51 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The readme is five wiki links and a claim about who uses it

The whole usage section is five numbered links, each pointing at a wiki page rather than at documentation in the repository: a quick start, an API reference, the view types, the binding integration, and the custom indicator. So the readme's job is orientation rather than instruction, and a reader who downloads the artifact still has to leave the repository to learn how to use it. That arrangement is common for libraries with a long history, and it is worth remembering when a readme appears to be missing the setup instructions. Above that sits a sentence listing the applications said to use it, from a video service and two music services through two payment and retail apps to a video platform, a audio platform and a large video site. That list is a marketing claim rather than a technical one, but it does explain the design pressure: a component used by that many teams needs many page styles and a swappable indicator rather than one fixed appearance.

Three page styles, and two methods that reach the rest

The first documented feature is page style, and the table names three: multiple pages at equal size, multiple pages scaled, and multiple pages overlapping. The second section says more styles can be built using two configuration methods, one that sets the page style and one that sets a reveal width. That second method is the important one, because it means the three named styles are conveniences rather than a closed set, and the reveal width is what controls how much of the neighbouring page is visible. A sample page is linked for each, so the shapes can be seen without reading the source. The naming is also a hint about the difficulty order: the plain equal-size layout is the default case, and the other two are variations on how much of the neighbour is visible and whether the page scales down as it moves away from centre. The naming is also a hint about the difficulty order: the plain equal-size layout is the default case, and the other two are variations on how much of the neighbour is visible and whether the page scales down as it moves away.

Three indicator styles times five slide modes

The indicator documentation is a grid and the grid is the specification: three indicator styles as columns and five slide modes as rows. The modes are named and they describe how the active indicator moves or changes state, while the styles describe the mark itself, one of them a rounded rectangle. So the library offers fifteen combinations from two independent axes rather than fifteen separately implemented indicators. The readme is explicit that a custom indicator is also supported, and that it means extending one base class or implementing one interface and overriding methods, which is the smallest possible surface for a replaceable component: one base class or one interface, and everything else is drawing.

The indicator was split into its own repository

One line explains a structural change that matters for anyone upgrading. The indicator library was split out of this project, and a second repository now holds it, with a link and an invitation to look there for more information. That means a project that previously took the indicator classes from this artifact now takes them from another, and the two versions can drift independently. The readme keeps the indicator documentation here as well as pointing at the new home, That duplication is the kind that tends to outlive the migration it describes.

The build directory named git is not a mistake

The repository root contains a library directory for the component itself and an application directory for the demo, plus the standard Gradle files, a wrapper for both platforms, and two directories with no obvious purpose from their names alone. One is named for code style and one is named git. A build tool configuration that is version controlled under a directory named git is not a slip; it is how a tool that lints every commit gets its own versioned rules rather than inheriting whatever the machine happens to have. The code style directory is the same idea for the source itself, so formatting decisions are reviewable in a diff rather than being a matter of whoever ran it last.

Two languages in one repository, and a demo in both

The recorded primary language is Java, and the sample links in the readme point at files with two different extensions. One page sample is a Kotlin file and one indicator sample is a Java file, which tells you the demo module demonstrates both. That matters more than it sounds: a view-binding based component can be consumed from either language, and a demo that exercises both is the only way to keep that promise honest. The binding wiki page covers the same ground from the consumer side, covering both of the binding approaches the framework offers rather than only one.

The licence text is embedded in the readme

The final section is a licence block written out in full rather than linked, with a copyright range and the standard grant of use, modification and distribution under conditions, and a warranty disclaimer. There is no separate licence file mentioned in the readme, although the repository root does contain one. The readme also carries a thanks section naming two other banner projects as prior art and one community site, which is worth reading as an acknowledgement that the page and indicator patterns here are not original to this repository.

Editorial conclusion

BannerViewPager suits an Android project that needs a carousel with multiple visible pages and a configurable indicator, and that is willing to read a wiki rather than a manual. It does not suit a project that wants one artifact, since the indicator ships separately. Before adopting it, read the page-style and indicator pages rather than the summary, and note that the current documentation lives in wiki pages while the readme only indexes them.

Frequently asked questions

How do I add BannerViewPager to an Android project?

The readme indexes a quick start wiki page rather than restating the steps, and the project is consumed as a library artifact from a jitpack-hosted build rather than from a package registry. The component itself lives in its own module in the repository, separate from the demo application.

What page styles does BannerViewPager support?

Three are named in a table: multiple pages at equal size, multiple pages scaled, and multiple pages overlapping. The readme also states that further styles can be produced with a page-style setter and a reveal-width setter, so the three are conveniences rather than the whole set.

Can I write my own indicator for BannerViewPager?

Yes, and the readme gives the two ways: extend the base indicator class, or implement the indicator interface and override its methods, after which you can draw whatever you want. Built-in choices are three styles combined with five slide modes, and the indicator code itself now lives in a separate repository.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. README
  4. Releases
  5. zhpanvip/BannerViewPager on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/zhpanvip-bannerviewpager.svg)](https://hysenlabs.com/projects/zhpanvip-bannerviewpager)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/zhpanvip-bannerviewpager.svg)](https://hysenlabs.com/projects/zhpanvip-bannerviewpager)

Was this useful?