Pager Dots Indicator

安卓系统中 ViewPager 的三个材料点指示器 ! 「Three material Dots Indicators for view pagers in Android !」

Github星跟踪图

Pager Dots Indicator

Maven Central
Android Arsenal

Dots indicator is an Android library available for Jetpack Compose and XML 🚀

Don't forget to star the project if you like it!
star
== heart

Feel free to submit issues and enhancement requests !

How to

Gradle

repositories {
    google()
    mavenCentral()
}

dependencies {
    implementation("com.tbuonomo:dotsindicator:5.0")
}

For Jetpack Compose

Column {
    var pageCount by remember { mutableStateOf(5) }
    val pagerState = rememberPagerState()
    HorizontalPager(
        modifier = Modifier.padding(top = 24.dp),
        pageCount = pageCount,
        contentPadding = PaddingValues(horizontal = 64.dp),
        pageSpacing = 24.dp,
        state = pagerState
    ) {
        PagePlaceholderItem()
    }
    DotsIndicator(
        dotCount = pageCount,
        type = ShiftIndicatorType(dotsGraphic = DotGraphic(color = MaterialTheme.colorScheme.primary)),
        pagerState = pagerState
    )
}

4 types are available in JetpackCompose

ShiftIndicatorType

ezgif com-crop (1)

DotsIndicator(
    dotCount = pageCount,
    type = ShiftIndicatorType(dotsGraphic = DotGraphic(color = MaterialTheme.colorScheme.primary)),
    pagerState = pagerState
)

SpringIndicatorType

ezgif com-crop (2)

DotsIndicator(
    dotCount = pageCount,
    type = SpringIndicatorType(
        dotsGraphic = DotGraphic(
            16.dp,
            borderWidth = 2.dp,
            borderColor = MaterialTheme.colorScheme.primary,
            color = Color.Transparent
        ),
        selectorDotGraphic = DotGraphic(
            14.dp,
            color = MaterialTheme.colorScheme.primary
        )
    ),
    pagerState = pagerState
)

WormIndicatorType

ezgif com-crop (3)

DotsIndicator(
    dotCount = pageCount,
    type = WormIndicatorType(
        dotsGraphic = DotGraphic(
            16.dp,
            borderWidth = 2.dp,
            borderColor = MaterialTheme.colorScheme.primary,
            color = Color.Transparent,
        ),
        wormDotGraphic = DotGraphic(
            16.dp,
            color = MaterialTheme.colorScheme.primary,
        )
    ),
    pagerState = pagerState
)

BalloonIndicatorType

ezgif com-crop (4)

DotsIndicator(
    dotCount = pageCount,
    type = BalloonIndicatorType(
        dotsGraphic = DotGraphic(
            color = MaterialTheme.colorScheme.primary,
            size = 8.dp
        ),
        balloonSizeFactor = 2f
    ),
    dotSpacing = 20.dp,
    pagerState = pagerState
)

For XML

DotsIndicator

ezgif com-crop 1 ezgif com-crop 3

In your XML layout

<com.tbuonomo.viewpagerdotsindicator.DotsIndicator
    android:id="@+id/dots_indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:dotsColor="@color/material_white"
    app:dotsCornerRadius="8dp"
    app:dotsSize="16dp"
    app:dotsSpacing="4dp"
    app:dotsWidthFactor="2.5"
    app:selectedDotColor="@color/md_blue_200"
    app:progressMode="true"
    />

Custom Attributes

Attribute Description
dotsColor Color of the dots
selectedDotColor Color of the selected dot (by default the dotsColor)
progressMode Lets the selected dot color to the dots behind the current one
dotsSize Size in dp of the dots (by default 16dp)
dotsSpacing Size in dp of the space between the dots (by default 4dp)
dotsWidthFactor The dots scale factor for page indication (by default 2.5)
dotsCornerRadius The dots corner radius (by default the half of dotsSize for circularity)

In your Kotlin code

    val dotsIndicator = findViewById<DotsIndicator>(R.id.dots_indicator)
    val viewPager = findViewById<ViewPager>(R.id.view_pager)
    val adapter = ViewPagerAdapter()
    viewPager.adapter = adapter
    dotsIndicator.attachTo(viewPager)

SpringDotsIndicator

ezgif com-crop 4 ezgif com-crop 5

In your XML layout

<com.tbuonomo.viewpagerdotsindicator.SpringDotsIndicator
    android:id="@+id/spring_dots_indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:dampingRatio="0.5"
    app:dotsColor="@color/material_white"
    app:dotsStrokeColor="@color/material_yellow"
    app:dotsCornerRadius="2dp"
    app:dotsSize="16dp"
    app:dotsSpacing="6dp"
    app:dotsStrokeWidth="2dp"
    app:stiffness="300"
    />

Custom Attributes

Attribute Description
dotsColor Color of the indicator dot
dotsStrokeColor Color of the stroke dots (by default the indicator color)
dotsSize Size in dp of the dots (by default 16dp)
dotsSpacing Size in dp of the space between the dots (by default 4dp)
dotsCornerRadius The dots corner radius (by default the half of dotsSize for circularity)
dotsStrokeWidth The dots stroke width (by default 2dp)
dampingRatio The damping ratio of the spring force (by default 0.5)
stiffness The stiffness of the spring force (by default 300)

In your Kotlin code

    val springDotsIndicator = findViewById<SpringDotsIndicator>(R.id.spring_dots_indicator)
    val viewPager = findViewById<ViewPager>(R.id.view_pager)
    val adapter = ViewPagerAdapter()
    viewPager.adapter = adapter
    springDotsIndicator.attachTo(viewPager)

WormDotsIndicator

ezgif com-crop 6 ezgif com-crop 7

In your XML layout

<com.tbuonomo.viewpagerdotsindicator.WormDotsIndicator
    android:id="@+id/worm_dots_indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:dotsColor="@color/material_blueA200"
    app:dotsStrokeColor="@color/material_yellow"
    app:dotsCornerRadius="8dp"
    app:dotsSize="16dp"
    app:dotsSpacing="4dp"
    app:dotsStrokeWidth="2dp"
    />

Custom Attributes

Attribute Description
dotsColor Color of the indicator dot
dotsStrokeColor Color of the stroke dots (by default the indicator color)
dotsSize Size in dp of the dots (by default 16dp)
dotsSpacing Size in dp of the space between the dots (by default 4dp)
dotsCornerRadius The dots corner radius (by default the half of dotsSize for circularity)
dotsStrokeWidth The dots stroke width (by default 2dp)

In your Kotlin code

    val wormDotsIndicator = findViewById<WormDotsIndicator>(R.id.worm_dots_indicator)
    val viewPager = findViewById<ViewPager>(R.id.view_pager)
    val adapter = ViewPagerAdapter()
    viewPager.adapter = adapter
    wormDotsIndicator.attachTo(viewPager)

Support of ViewPager2

The attachTo can take a ViewPager or a ViewPager2

Help Maintenance

If you could help me to continue maintain this repo, buying me a cup of coffee will make my life really happy and get much energy out of it.

Changelog

5.0

  • Add Jetpack Compose support with 4 types: ShiftIndicatorType, SpringIndicatorType, WormIndicatorType, BalloonIndicatorType

4.3

4.2

Fix #115
The library is now on MavenCentral.
The library name moves from com.tbuonomo.andrui:viewpagerdotsindicator to com.tbuonomo:dotsindicator

4.1.2

Fix #55 and #56

4.1.1

Fix crash

4.1

  • Support RTL (fix #32 and #51)

4.0

  • Support of ViewPager2 (fix #40)
  • Convert all the project to Kotlin
  • Migration to AndroidX
  • Fix #37: findViewById, causing missing adapter error

3.0.3

  • Fix #20: Dots indicator initialises with the wrong number of dots initially

3.0.2

  • Add attribute selectedDotColor and progressMode to DotsIndicator
  • Fix RTL issues and improve DotsIndicator globally

2.1.0

  • Add attribute dotsStrokeColor to SpringDotsIndicator and WormDotsIndicator

License

Copyright 2016 Tommy Buonomo

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

主要指标

概览
名称与所有者tommybuonomo/dotsindicator
主编程语言Kotlin
编程语言Java (语言数: 2)
平台
许可证Apache License 2.0
所有者活动
创建于2017-07-09 20:38:35
推送于2024-11-21 12:53:31
最后一次提交2024-11-21 13:46:26
发布数14
最新版本名称5.1.0 (发布于 )
第一版名称1.0.0 (发布于 2018-04-09 23:04:40)
用户参与
星数3.5k
关注者数29
派生数359
提交数208
已启用问题?
问题数180
打开的问题数23
拉请求数12
打开的拉请求数2
关闭的拉请求数15
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?