This lib can be used for viewpager infinite loop with indicator easily.

Overview

InfiniteIndicator

This project is inspired by the android-auto-scroll-view-pager of Trinea. Use the salvage lib implement view recycle adapter.It contains two style.One is CircleIndicator seperated from Android-ViewPagerIndicator.Another is copy from CircleIndicator.You can custome style and animation.

Screenshot

Screenshot

Demo Download

APK Donwload

Setting

You can config all feature in the IndicatorConfiguration class.It adopt builder design pattern.

  • interval(long) set interval time of scroll in milliseconds, default is DEFAULT_INTERVAL.
  • direction(int) set scroll direction, default is RIGHT.
  • isLoop(boolean) set whether still scroll when scroll to the end page,default is true
  • isAutoScroll(boolean) whether start scroll while notiyDataChange.
  • scrollDurationFactor(double) set the factor of scroll duration
  • isStopWhenTouch(boolean) whether stop scroll while touching, default is true.
  • position set the position of indicator.More value,you can reference IndicatorConfiguration.IndicatorPosition enum
  • viewBinder set custom view binder to handle page load logic,default provide BaseViewBinder, which just support image load,and you must provide a imageloader,if you want to load complex page ,you can provide a custome viewbinder,and imageloader is useless.
  • onPageChangeListener set click listener to page
  • imageLoader(ImageLoader) set the loader engine to load image while page sliding.You can use any image loader library you what,there are several imageloader of Glide ,Picasso and UIL,decide how to load image,is absolutely free.

indicator_type
the style of Indicator,you can set indicator_type attribute in the xml layout to change the indicator style.

  • indicator_default CirCleIndicator
  • indicator_anim_circle AnimCircleIndicator
  • indicator_anim_line AnimLineIndicator

Including In Your Project

compile 'cn.lightsky.infiniteindicator:library:1.2.2'

Usage

   <cn.lightsky.infiniteindicator.InfiniteIndicatorLayout
        android:id="@+id/indicator_default_circle"
        app:indicator_type="indicator_anim_circle"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"/>
class AnimIndicatorActivity extends FragmentActivity implements ViewPager.OnPageChangeListener,OnPageClickListener {
    private ArrayList<Page> pageViews;
    private InfiniteIndicator mAnimCircleIndicator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anim_indicator);

        initData();
        mAnimCircleIndicator = (InfiniteIndicator) findViewById(R.id.infinite_anim_circle);
        IndicatorConfiguration configuration = new IndicatorConfiguration.Builder()
                .imageLoader(new UILoader())
                .isStopWhileTouch(true)
                .onPageChangeListener(this)
                .onPageClickListener(this)
                .direction(LEFT)
                .position(IndicatorConfiguration.IndicatorPosition.Center)
                .build();
        mAnimCircleIndicator.init(configuration);
        mAnimCircleIndicator.notifyDataChange(pageViews);

    }

    private void initData() {
        pageViews = new ArrayList<>();
        pageViews.add(new Page("A", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/a.jpg",this));
        pageViews.add(new Page("B", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/b.jpg",this));
        pageViews.add(new Page("C", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/c.jpg",this));
        pageViews.add(new Page("D", "https://raw.githubusercontent.com/lightSky/InfiniteIndicator/master/res/d.jpg",this));

    }

    //To avoid memory leak ,you should release the res
    @Override
    protected void onPause() {
        super.onPause();
        mAnimCircleIndicator.stop();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mAnimCircleIndicator.start();
    }

    @Override
    public void onPageSelected(int position) {
        //do something
    }

    @Override
    public void onPageClick(int position, Page page) {
        //do something
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }   
}

Thanks
android-auto-scroll-view-pager
AndroidImageSlider
CircleIndicator
Android-ViewPagerIndicator

About me
Weibo: light_sky
Blog: lightskystreet.com     light_sky
Email: [email protected]

Comments
  • The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged!

    The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged!

    你好,使用该库有时会发生如题错误: 发生该错误的机型有:MI 4LTE ,HM NOTE 1S, MI 3W。操作系统均为 android 4.4.4 下面是详细报错: java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 1300, found: 1200 Pager id: com.louie.luntonghui:id/view_pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class cn.lightsky.infiniteindicator.indicator.RecyleAdapter at android.support.v4.view.ViewPager.populate(ViewPager.java:999) at android.support.v4.view.ViewPager.populate(ViewPager.java:951) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1473) at android.view.View.layout(View.java:14832) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.widget.ScrollView.onLayout(ScrollView.java:1468) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14845) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2026) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1783) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1039) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5648) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5047) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(Native Method)

    opened by Jack-Xiao 8
  • 突然就出现Error:Failed to resolve: com.nineoldandroids:library:2.4.+

    突然就出现Error:Failed to resolve: com.nineoldandroids:library:2.4.+

    你好,我之前一直在用你的项目,使用compile 'cn.lightsky.infiniteindicator:library:1.0.3',但是我今天打开我的项目后发现如下错误: Error:Failed to resolve: com.nineoldandroids:library:2.4.+ Open File
    Show in Project Structure dialog

    然后我重新编译:发现错误 Error:A problem occurred configuring project ':app'.

    Could not resolve all dependencies for configuration ':app:_debugCompile'. Could not find any matches for com.nineoldandroids:library:2.4.+ as no versions of com.nineoldandroids:library are available. Searched in the following locations: https://jcenter.bintray.com/com/nineoldandroids/library/maven-metadata.xml https://jcenter.bintray.com/com/nineoldandroids/library/ file:/E:/Program Files/sdk/extras/android/m2repository/com/nineoldandroids/library/maven-metadata.xml file:/E:/Program Files/sdk/extras/android/m2repository/com/nineoldandroids/library/ file:/E:/Program Files/sdk/extras/google/m2repository/com/nineoldandroids/library/maven-metadata.xml file:/E:/Program Files/sdk/extras/google/m2repository/com/nineoldandroids/library/ Required by: SaoHeMerchant:app:unspecified > cn.lightsky.infiniteindicator:library:1.0.3

    opened by imyyq-star 6
  • 重置slider失败问题反馈,谢谢

    重置slider失败问题反馈,谢谢

    我利用三个方法mSlider.removeAllViews()、mSlider.refreshDrawableState()、mSlider.notifyDataChange()成功清除了之前加载的sliderview,但是再利用 mSlider.addSlider(sliderView)添加原来的sliderView时就什么也不显示了,很奇怪,楼主什么时候有空看一下,给一个正确的方法吧

    opened by lituanzhang 3
  • OutOfMemoryError

    OutOfMemoryError

    使用该库时遇到的错误: OutOfMemoryError, 以下为错误详细,是否可以提供解决建议. java.lang.OutOfMemoryError at java.util.WeakHashMap.newEntryArray(WeakHashMap.java:53) at java.util.WeakHashMap.rehash(WeakHashMap.java:645) at java.util.WeakHashMap.put(WeakHashMap.java:626) at com.squareup.picasso.Picasso.defer(Picasso.java:419) at com.squareup.picasso.RequestCreator.into(RequestCreator.java:574) at cn.lightsky.infiniteindicator.slideview.BaseSliderView.loadByPicasso(BaseSliderView.java:231) at cn.lightsky.infiniteindicator.slideview.BaseSliderView.bindEventAndShow(BaseSliderView.java:190) at cn.lightsky.infiniteindicator.slideview.DefaultSliderView.getView(DefaultSliderView.java:25) at cn.lightsky.infiniteindicator.indicator.RecyleAdapter.getView(RecyleAdapter.java:55) at cn.lightsky.infiniteindicator.jakewharton.salvage.RecyclingPagerAdapter.instantiateItem(RecyclingPagerAdapter.java:54) at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:869) at android.support.v4.view.ViewPager.populate(ViewPager.java:1085) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:551) at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:513) at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:505) at cn.lightsky.infiniteindicator.InfiniteIndicatorLayout.scrollOnce(InfiniteIndicatorLayout.java:226) at cn.lightsky.infiniteindicator.InfiniteIndicatorLayout$ScrollHandler.handleMessage(InfiniteIndicatorLayout.java:287) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:177) at android.app.ActivityThread.main(ActivityThread.java:4947) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) at dalvik.system.NativeStart.main(Native Method)

    opened by Jack-Xiao 3
  • 快速切换页签时报空指针

    快速切换页签时报空指针

    java.lang.NullPointerException at com.nineoldandroids.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:523) at com.nineoldandroids.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:410) at com.nineoldandroids.animation.ValueAnimator.startAnimation(ValueAnimator.java:1046) at com.nineoldandroids.animation.ValueAnimator.access$400(ValueAnimator.java:43) at com.nineoldandroids.animation.ValueAnimator$AnimationHandler.handleMessage(ValueAnimator.java:610) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method)

    mAnimCircleIndicator.addSlider(defaultSliderView); 这一句抛出的异常

    opened by petma 3
  • 一些描述性小问题

    一些描述性小问题

    帅,下载代码试用过程中遇到的小细节问题 1、demo 的test 文件夹中addSlidersActivity.java ---->AddSlidersActivity.java 2、ReadMind中,Usage描述中,Layout描述InfiniteIndicatorLayout(老版本)--->InfiniteIndicator 谢谢你

    opened by shuaisunny 2
  • not working onPageClick

    not working onPageClick

    when i click on any page it does take any action. please help me. how to do this i am using your demo application all are going fine but only clicking on page is not working.

    opened by tejprakashtiwary 1
  • I got into trouble.

    I got into trouble.

    When I compile this below error shown

    Error:Could not find any matches for com.nineoldandroids:library:2.4.+ as no versions of com.nineoldandroids:library are available. Required by: Finlandia:app:unspecified > cn.lightsky.infiniteindicator:library:1.0.3 Search in build.gradle files

    When I figure out. there is a gradle dependency problem.

    your one is like this. "compile 'com.nineoldandroids:library:2.4.+'

    after error my one changed like this without +

    "compile 'com.nineoldandroids:library:2.4.0'

    It works fine. please check this issue. Thanks.

    opened by JackDinealKIM 1
  • 图片切换,每次都读取URL的图片,没有缓存

    图片切换,每次都读取URL的图片,没有缓存

    手动滑动切换时,loading有点长, 不能设置默认的图片,比如loading中显示的默认图片,还有读取图片失败显示的图片 建议把addSlider,改成或者添加 ,一个addCustomView的功能,就可以了,具体的view由用户自己创建。 图片读取缓存问题,让用户自己处理,只负责切换自动切换view。 并且提供onPageChangeListener

    opened by yasenagat 1
  • 請教,如果要一個view顯示兩個或多個圖的item,求指導

    請教,如果要一個view顯示兩個或多個圖的item,求指導

    嘗試成功運行了項目,想舉一反三,想要一個view顯示兩個或多個圖的item,并對於點擊響應, 大概思路: 1.copy new layout from render_type_default.xml to more_render_type_default.xml, more_render_type_default.xml add one imageView: code: https://github.com/oliguo/InfiniteIndicator/blob/master/library/src/main/res/layout/more_render_type_default.xml

    2.create MoreSliderView extends BaseSliderView,and override getView: code: https://github.com/oliguo/InfiniteIndicator/blob/master/library/src/main/java/cn/lightsky/infiniteindicator/slideview/MoreSliderView.java

    3.add new indicator in activity_anim_indicator.xml code: https://github.com/oliguo/InfiniteIndicator/blob/master/demo/src/main/res/layout/activity_anim_indicator.xml

    4.add indicator object in AnimIndicatorActivity.java code: https://github.com/oliguo/InfiniteIndicator/blob/master/demo/src/main/java/cn/lightsky/infiniteindicator/AnimIndicatorActivity.java

    執行安裝后,不能開啟,請教下是不是哪裡寫錯了

    opened by oliguo 1
  • Memory issue

    Memory issue

    I found that when Infinite indicator is running, the memory has an issue. Memory increases continuously then it causes out of memory. However if I trigger GC manually, it runs ok. Is it an issue? Thanks

    opened by ancuop 1
  • layout_height =

    layout_height ="match_parent" show nothing

    When I try your example, If i use layout_height ="match_parent" (or wrap_content), it shows nothing. However, when I set a value as below, it runs well. Is it a bug, can you fix it? Thanks

    <cn.lightsky.infiniteindicator.InfiniteIndicator android:id="@+id/indicator_custome_circle" android:layout_width="match_parent" app:indicator_type="indicator_default" android:layout_height="300dp"/>

    opened by ancuop 1
  • 嵌套在滚动视图(ScrollView ..)中,按住InfiniteIndicator控件滑动时松开会停止自动滚动

    嵌套在滚动视图(ScrollView ..)中,按住InfiniteIndicator控件滑动时松开会停止自动滚动

    修复方式:在InfiniteIndicator类的dispatchTouchEvent方法中某一段代码修改如下

    if (isStopScrollWhenTouch) {
                if ((action == MotionEvent.ACTION_DOWN) && isAutoScroll) {
                    isStopByTouch = true;
                    stop();
                } else if ((ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL)&& isStopByTouch) {
                    start();
                }
            }
    
    opened by xuwj 1
Releases(v1.2.0)
  • v1.2.0(Nov 10, 2016)

  • release/1.0.3(Aug 13, 2015)

    InfiniteIndicator 1.0.3 is a bugfix and minor feature release.

    BugFixes

    • Fix getChildAt NullPointerException
    • Fix memory leak cause by hanler

    Features

    • Support touch event when scroll vertically
    • Add onPageChangeListener
    Source code(tar.gz)
    Source code(zip)
Owner
lightSky
Day day up !
lightSky
IOSProgressBar is a progress-bar lib for android. And the progress-bar looks like iOS system style

IOSProgressBar is a progress-bar lib for android. And the progress-bar looks like iOS system style

heyangyang 6 Aug 25, 2022
A wave view of android,can be used as progress bar.

WaveView ![Gitter](https://badges.gitter.im/Join Chat.svg) A wave view of android,can be used as progress bar. Screenshot APK demo.apk What can be use

Kai Wang 1.3k Dec 28, 2022
Android AlertDialog with moving dots progress indicator

Spots progress dialog Android AlertDialog with moving spots progress indicator packed as android library. =========== Usage The library available in m

Maksym Dybarskyi 1.1k Dec 26, 2022
A rubber indicator

RubberIndicator A rubber indicator for ViewPager Designed by Valentyn Khenkin Here is the CSS version Usage The attributes for RubberIndicator are not

Fei Liang 1.6k Dec 16, 2022
MaterialLoadingProgressBar provide a styled ProgressBar which looks like SwipeRefreshLayout's loading indicator(support-v4 v21+)

MaterialLoadingProgressBar MaterialLoadingProgressBar provide a styled ProgressBar which looks like SwipeRefreshLayout's loading indicator(support-v4

lsjwzh 1.1k Nov 19, 2022
Android - An action bar item which acts both as a refresh button and as a progress indicator

RefreshActionItem An action bar item that implements this common pattern: Initially it shows a refresh button. If the button is clicked, a background

Manuel Peinado Gallego 655 Nov 10, 2022
A 'Google Fit' like activity indicator for Android

WheelIndicatorView A 'Google Fit' like activity indicator for Android Screenshots Usage How to use: Add a "WheelIndicatorView" in the layout editor li

David Lázaro 396 Nov 25, 2022
:barber: [Android Library] Stacked dual progress indicator progress-bar

StackedHorizontalProgressBar Specs Featured in Show some ❤️ Android library with ability to show two progress indicators in one horizontal progress ba

Nishant Srivastava 98 Nov 11, 2022
A rubber indicator

RubberIndicator A rubber indicator for ViewPager Designed by Valentyn Khenkin Here is the CSS version Usage The attributes for RubberIndicator are not

Fei Liang 1.6k Dec 16, 2022
A lightweight circular indicator view library for Android

A lightweight circular indicator view library for Android

İbrahim Süren 241 Dec 30, 2022
Indicator like tachometer View Library for Android

Tachometer Android Indicator like tachometer View Library for Android GIF Sample Preview Setup Step 1. Add Jitpack repository to your project build.gr

null 1 Jul 28, 2022
Some beautiful android loading drawable, can be combined with any view as the LoadingView or the ProgressBar. Besides, some Drawable can customize the loading progress too.

LoadingDrawable: Android cool animation collection 前言 CircleRotate源码解析 Fish源码解析 LoadingDrawable is some android animations implement of drawable: a li

dinus_developer 4.1k Dec 27, 2022
A simple progress loader inspired by Can you Code this UI? Volume 6! - https://stories.uplabs.com/can-you-code-this-ui-volume-6-7bd09fa6dd92#.nyh2zhpvb

SlidingSquaresLoader Sliding Square Loader - A simple progress loader inspired by Can you Code this UI? Volume 6! Gradle Step 1. Add the JitPack repos

Hamza Fetuga 151 Jul 26, 2022
⏳ A delightful progress animation that you'll fall in ❤️️ with, very easily.

TinglingSquares View A delightful progressbar animation. Demo Download Add this to your app module's build.gradle file dependencies { compile

Ishan Khanna 101 Dec 23, 2022
An android library to easily add circular progress bar into your Jetpack Compose apps.

CircularProgressBar for Jetpack Compose An android library to easily add circular progress bar into your Jetpack Compose apps. Have a Look Usage Circu

Hitanshu Dhawan 38 Oct 30, 2022
Customizable bouncing dots for smooth loading effect. Mostly used in chat bubbles to indicate the other person is typing.

LoadingDots for Android Customizable bouncing dots view for smooth loading effect. Mostly used in chat bubbles to indicate the other person is typing.

Eyal Biran 162 Dec 2, 2022
a progress view used to grade mobiles phone

GradeProgressView a progress view used to grade mobiles phone #System Requirement Android API 11+, Because of the use of ValueAnimation, if you want u

deadline 87 Jul 17, 2022
A circular android ProgressBar library which extends View, and the usage same as ProgressBar, It has solid,line and solid_line three styles. Besides, progress value can be freely customized.

CircleProgressBar 中文版文档 The CircleProgressBar extends View, It has both solid and line two styles. Besides, progress value can be freely customized. I

dinus_developer 1.2k Jan 3, 2023
DownloadProgressBar is an android library that delivers awesome custom progress bar. You can manipulate it's state in every way.

Download Progress Bar Android progress bar with cool animation, inspired by : https://dribbble.com/shots/2012292-Download-Animation ###Attributes Attr

Mariusz Brona 978 Nov 10, 2022