Material Design ProgressBar with consistent appearance

Overview

MaterialProgressBar

Icon

Material Design ProgressBar with consistent appearance on Android 4.0+.

Why MaterialProgressBar?

  • Consistent appearance on Android 4.0+.
  • Correct tinting across platforms.
  • Able to remove the intrinsic padding of framework ProgressBar.
  • Able to hide the progress background of framework horizontal ProgressBar.
  • Able to show a determinate circular progress.
  • Used as a drop-in replacement for framework ProgressBar.

Preview

Google Play

Sample APK

Android 4.4.4

Android 4.4.4

Samsung Android 5.0.1 (native implementation fails to tint)

Samsung Android 5.0.1

Android 6.0.1

Android 6.0.1

Integration

Gradle:

implementation 'me.zhanghai.android.materialprogressbar:library:1.6.1'

Usage

You can either simply use the MaterialProgressBar widget, or set drawables from this library on a regular ProgressBar.

Using Widget

Simply replace your ProgressBar with MaterialProgressBar, and remember to apply corresponding style and attribute for correct behavior.

For example, to create an indeterminate horizontal MaterialProgressBar:

<me.zhanghai.android.materialprogressbar.MaterialProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminate="true"
    app:mpb_progressStyle="horizontal"
    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" />

In order to make your ProgressBar take the correct and consistent size on all versions, you will always need to use one of the styles from this library. The trick inside it is android:minWidth, android:maxWidth (and height) that controls the drawable size.

  • Widget.MaterialProgressBar.ProgressBar
  • Widget.MaterialProgressBar.ProgressBar.Horizontal
  • And more size and no-padding variants in styles.xml

Available custom attributes:

  • app:mpb_progressStyle: Style of progress drawable: circular or horizontal. Defaults to circular.
  • app:mpb_setBothDrawables: Whether both determinate and indeterminate drawables should be set on this progress bar. Defaults to false (for performance). Should be set to true if you want to use both of the backported determinate and indeterminate drawables.
  • app:mpb_useIntrinsicPadding: Whether progress drawable should use its intrinsic padding. Defaults to true.
  • app:mpb_showProgressBackground: Whether progress drawable should show a progress background. Defaults to true for horizontal progress drawable, false otherwise.
  • app:mpb_determinateCircularProgressStyle: Style of determinate circular progress drawable: normal or dynamic. Defaults to normal.

8 tint-related attributes such as app:mpb_progressTint and app:mpb_progressTintMode are also supported so that they can control the tinting of progress drawables. The default tint color is ?colorControlActivated, and the default tint mode is src_in.

For a detailed example, you can refer to the sample app's layout, where you can find examples such as removing progress padding or background.

Using Drawable

Three Material Design drawables are backported to Android 4.0 (API 14), so you can create one and set it directly on your ProgressBar.

For example, to set a IndeterminateHorizontalProgressDrawable on a ProgressBar.

progressBar.setIndeterminateDrawable(new IndeterminateHorizontalProgressDrawable(this));

You will also need to set a style from this library as in the section above.

For example, to define an indeterminate horizontal ProgressBar.

<ProgressBar
            android:id="@+id/indeterminate_horizontal_progress"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:indeterminate="true"
            style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" />

Don't forget to create and set the drawable as above.

You can also customize the behavior of these drawables by calling setShowBackground() and setUseIntrinsicPadding(). Tint-related methods setTint(), setTintList() and setTintMode() are also backported so that you can use them directly, but remember to take these drawables as their actual type or TintableDrawable because VM won't be able to find these methods on Drawable for legacy platforms.

If you want to support API level < 18, you'll need to workaround a canvas limitation as in here; Using MaterialProgressBar does this automatically.

For a detailed example, you can refer to the onCreate() method of the old sample's MainActivity and its layout main_activity.xml.

ProGuard

The AAR of this library has already included a ProGuard configuration file to make ObjectAnimator work properly.

Older versions

Neither Support v4 nor AppCompat v7 backported animation API to versions prior to ICS, and the NineOldAndroids library has already been deprecated since people should all be using minSdkVersion="14" now, so versions older than ICS are not supported.

License

Copyright 2015 Hai Zhang

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.
Comments
  • Implement determinate circular progressbar

    Implement determinate circular progressbar

    This is an implementation of the determinate circular progress bar as shown here: https://storage.googleapis.com/material-design/publish/material_v_10/assets/0B14F_FSUCc01N2kzc1hlaFR5WlU/061101_Circular_Sheet_xhdpi_005.webm

    Closes #24

    Screenshots of this implementation: 1 2 3 4 5 6 7 8

    enhancement 
    opened by webmaster128 25
  • init() should be called delayed

    init() should be called delayed

    MaterialProgressBar fully initializes even though it is set to INVISIBLE or GONE. It should instead only call init() when it first becomes visible.

    I did some profiling and could improve overall time to set up a view to 20% just by removing MaterialProgressBar. I admit I used it very often, but you should still initialize lazy right before it is needed.

    enhancement question 
    opened by oliverhausler 21
  • Big indeterminate (circular) Progress Bar looks blurry

    Big indeterminate (circular) Progress Bar looks blurry

    Not sure if this is an issue or expected behaviour of android resource management but the big indeterminate (circular) Progress Bar looks blurry on android 4.2.2 (768x1280, 320dpi).

    It may not be very noticeable in screenshot but here it is: http://i.imgur.com/LRP6jlO.png it's definitely noticeable on runtime.

    bug help wanted 
    opened by rpgdev 18
  • "java.lang.NumberFormatException: Invalid int:" on API 17

    API 17 Style: Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding

     Caused by: java.lang.NumberFormatException: Invalid int: ".0dip"
            at java.lang.Integer.invalidInt(Integer.java:138)
            at java.lang.Integer.parse(Integer.java:375)
            at java.lang.Integer.parseInt(Integer.java:366)
            at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:123)
            at android.content.res.TypedArray.getInt(TypedArray.java:254)
            at me.zhanghai.android.materialprogressbar.MaterialProgressBar.init(MaterialProgressBar.java:74)
            at me.zhanghai.android.materialprogressbar.MaterialProgressBar.<init>(MaterialProgressBar.java:39)
    
    bug 
    opened by flaviojunior 11
  • No Indeterminate ProgressBar/Horizontal in Samsung device, Android 5.0

    No Indeterminate ProgressBar/Horizontal in Samsung device, Android 5.0

    My device is: Samsung Galaxy S5, Android 5.0.

    As you can see in below screenshot, there is native implementation of Indeterminate ProgressBar, but no one in library implementation. The same issue with ProgressBar on Toolbar.

    image

    bug 
    opened by anticafe 11
  • [Conflict] Bug when using another library (MateriaDialogs)

    [Conflict] Bug when using another library (MateriaDialogs)

    Hi,

    I'm using Material Dialogs, a library that depends on MaterialProgressBar.

    When using it, MaterialProgressBar "doesn't work": I using the Circular Progress with determinate mode, but it's always shown as indeterminate.

    Even if I exclude the dependency, It doesn't work (below some config test).

    compile 'me.zhanghai.android.materialprogressbar:library:1.4.1'
    compile('com.afollestad.material-dialogs:commons:0.9.4.4') {
        exclude group: 'me.zhanghai.android.materialprogressbar', module: 'library'
    }
    
    compile 'me.zhanghai.android.materialprogressbar:library:1.4.1'
    compile('com.afollestad.material-dialogs:commons:0.9.4.4') {
        exclude group: 'com.afollestad.material-dialogs', module: 'core'
    }
    compile('com.afollestad.material-dialogs:core:0.9.4.4') {
        exclude group: 'me.zhanghai.android.materialprogressbar', module: 'library'
    }
    

    I'm "stuck", don't know how I can fix it neither what to test / try to debug.

    If you need more informations or test, don't hesitate.

    Thanks,

    Regards

    [Edit]: issue open on MaterialDialogs: https://github.com/afollestad/material-dialogs/issues/1364

    question 
    opened by Gounlaf 10
  • Manifest merger failed!

    Manifest merger failed!

    I just started to learn Android development few weeks ago so maybe there's issue with me and not with this library. But whenever I'm trying to use it even in new project Android Studio throws out this error.

    Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory). Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-22:19 to override.

    invalid 
    opened by Tukmens 7
  • Feedback MaterialProgressBar problem

    Feedback MaterialProgressBar problem

    Hello thank you for you library, Now I want to change the MaterialProgressBar color with the code, but I did not try to succeed. Could you give an example? Thank you @DreaminginCodeZH

    opened by tcqq 7
  • setBothDrawables=true renders black background on API 19

    setBothDrawables=true renders black background on API 19

    Here is my current configuration:

    <me.zhanghai.android.materialprogressbar.MaterialProgressBar
            style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding"
            android:id="@+id/cardProgressBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:progress="10"
            android:secondaryProgress="20"
            android:max="100"
            app:mpb_progressStyle="horizontal"
            app:mpb_useIntrinsicPadding="false"
            app:mpb_setBothDrawables="true"
            app:mpb_showProgressBackground="true"/>
    

    On API 19, it renders as follows:

    And on API 24, it renders as expected:

    When just using either indeterminate or determinate mode, everything renders as expected. Only when mpb_setBothDrawables is true, it renders black on 19.

    opened by rdadkins 7
  • Add ability to change circular progressbar width

    Add ability to change circular progressbar width

    Hi, please add this option , I am making a button with icon in center and circular progressbar around it, and it visually looks bad when progressbar is different width than lines in icon. Afaik I can tell you scale the cancas with width, but Id like to set fixed width

    enhancement 
    opened by ursusursus 7
  • Android Studio 2.0 Preview render exception

    Android Studio 2.0 Preview render exception

    Since Android Studio 2.0, the progress bar throws an exception during rendering and blocks ALL of the views from showing in the preview (because of the exception).

    (I think it has something to do with the animation code in the progress bar.)

    java.lang.IllegalArgumentException: object is not an instance of declaring class   at java.lang.reflect.Method.invoke(Method.java:606)   at android.animation.PropertyValuesHolder_Delegate.callMethod(PropertyValuesHolder_Delegate.java:108)   at android.animation.PropertyValuesHolder_Delegate.nCallFloatMethod(PropertyValuesHolder_Delegate.java:145)   at android.animation.PropertyValuesHolder.nCallFloatMethod(PropertyValuesHolder.java:-1)   at android.animation.PropertyValuesHolder.access$400(PropertyValuesHolder.java:37)   at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1296)   at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:981)   at android.animation.ValueAnimator.setCurrentFraction(ValueAnimator.java:642)   at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:589)   at android.animation.ValueAnimator.start(ValueAnimator.java:1106)   at android.animation.ValueAnimator.start(ValueAnimator.java:1117)   at android.animation.ObjectAnimator.start(ObjectAnimator.java:852)   at android.animation.AnimatorSet.start(AnimatorSet.java:586)   at me.zhanghai.android.materialprogressbar.IndeterminateProgressDrawableBase.start   ... (IndeterminateProgressDrawableBase.java:45)   at me.zhanghai.android.materialprogressbar.IndeterminateProgressDrawable.start(IndeterminateProgressDrawable.java:19)   at android.widget.ProgressBar.drawTrack(ProgressBar.java:1713)   at android.widget.ProgressBar.onDraw(ProgressBar.java:1676)   at android.view.View.draw(View.java:16178)   at android.view.View.draw(View.java:16090)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16181)   at android.support.v4.widget.NestedScrollView.draw(NestedScrollView.java:1761)   at android.view.View.draw(View.java:16090)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1127)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16088)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:3609)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:61)   at android.view.ViewGroup.drawChild(ViewGroup.java:3609)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)   at android.view.View.draw(View.java:16181)

    Use the following example layout (really pretty much any layout that includes the ProgressBar will throw the exception) and view the Preview tab in Android Studio 2.0+:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
        <me.zhanghai.android.materialprogressbar.MaterialProgressBar
            android:id="@android:id/progress"
            style="@style/Widget.MaterialProgressBar.ProgressBar.Large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:indeterminate="false"/>
    
    </FrameLayout>
    

    Invalidating caches and restarting does not fix the problem.

    When running the code on a device or emulator, the progress bar shows correctly and animates correctly. This is only a problem when rendering the Preview. The annoying thing is that not only does it not render, but it keeps all the other views from rendering in the preview. Hiding the view with tools:visibility="gone" won't stop it from crashing the whole preview render.

    This occurs while using compile 'me.zhanghai.android.materialprogressbar:library:1.1.4'

    bug 
    opened by jon-adams 7
  • Fatal Exception: android.view.InflateException Binary XML file line #232: Error inflating class me.zhanghai.android.materialratingbar.MaterialRatingBar

    Fatal Exception: android.view.InflateException Binary XML file line #232: Error inflating class me.zhanghai.android.materialratingbar.MaterialRatingBar

    Caused by java.lang.VerifyError Verifier rejected class me.zhanghai.android.materialratingbar.ClipDrawableCompat due to bad method void me.zhanghai.android.materialratingbar.ClipDrawableCompat.setTintList(android.content.res.ColorStateList) (declaration of 'me.zhanghai.android.materialratingbar.ClipDrawableCompat' appears in /data/app/com.drdizzy-2/base.apk:classes3.dex)

    @zhanghai

    opened by SaadKhanJadoon 0
  • AndroidX

    AndroidX

    I am getting the following when running canISayByeByeJetifier.

    Scanning me.zhanghai.android.materialprogressbar:library:1.4.2
     Absoulute path: /Users/xiwei/.gradle/caches/modules-2/files-2.1/me.zhanghai.android.materialprogressbar/library/1.4.2/6bd6cd6e9107e22a5d3b4d3d3713a6864aae854e/library-1.4.2.aar
     Graphs to this dependency:
     +---com.afollestad.material-dialogs:core:0.9.5.0
         +---me.zhanghai.android.materialprogressbar:library:1.4.2
     Issues found:
     * me/zhanghai/android/materialprogressbar/Interpolators$TRIM_PATH_START.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/BaseProgressLayerDrawable.class -> android/support/v4/graphics/ColorUtils
     * me/zhanghai/android/materialprogressbar/Interpolators$TRIM_PATH_END.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/Interpolators$INDETERMINATE_HORIZONTAL_RECT2_TRANSLATE_X.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/Interpolators$INDETERMINATE_HORIZONTAL_RECT1_SCALE_X.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/MaterialProgressBar.class -> android/support/v7/widget/TintTypedArray
     * me/zhanghai/android/materialprogressbar/Interpolators$INDETERMINATE_HORIZONTAL_RECT1_TRANSLATE_X.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * me/zhanghai/android/materialprogressbar/Interpolators$INDETERMINATE_HORIZONTAL_RECT2_SCALE_X.class -> android/support/v4/view/animation/PathInterpolatorCompat
     * pom -> com.android.support:appcompat-v7:27.0.0
     * pom -> com.android.support:support-annotations:27.0.0
    
    

    Would you consider update to AndroidX?

    Thanks!

    opened by GC-Xi 0
  • Support stroke width in API or have better internals to support Kotlin

    Support stroke width in API or have better internals to support Kotlin

    Currently the library does not support stroke width and you said you do not want to implement it. (#61)

    The problem is that the current code is filled with protected / private constructors and prevent expanding the library from Kotlin to implement this.

    In Java it's relatively simple to achieve, in Kotlin we need to copy and convert 90% of the code :(

    To see the issue just convert:

    package me.zhanghai.android.materialprogressbar;
    
    import android.graphics.Paint;
    
    public class SingleCircularProgressDrawable2dp extends SingleCircularProgressDrawable {
    
        SingleCircularProgressDrawable2dp(int style) {
            super(style);
            setShowBackground(false);
        }
    
        @Override
        protected void onPreparePaint(Paint paint) {
            super.onPreparePaint(paint);
            paint.setStrokeWidth(2);
        }
    }
    

    to kotlin and see all the errors about package private / protected :(

    This is not cool to have to maintain java code in a full kotlin project just for this use case :(

    opened by Tolriq 4
  • [Enhancement] Permanently spinning determinate circular progress

    [Enhancement] Permanently spinning determinate circular progress

    Hi there! Thank you for great library. It would be very nice to implement one more determinateCircularProgressStyle with always spinning ring with gap decreasing its size with progress. In current implementation animation just stops when reaching target progress, the idea is to have continuous spinning. Does it violate Material Design principles?

    enhancement 
    opened by dummyco 1
  • colorControlActivated is not the default

    colorControlActivated is not the default

    colorAccent is used instead of colorControlActivated:

    image

    Theme:

        <!-- Legend App Theme -->
        <style name="BaseTheme.Legend" parent="AppTheme">
            <!-- Attributes for all APIs -->
            <item name="colorPrimary">@color/material_red_500</item>
            <item name="colorPrimaryDark">@color/material_blue_700</item>
            <item name="colorAccent">@color/material_green_a700</item>
            <item name="colorControlActivated">@color/material_purple_500</item>
            <item name="colorControlHighlight">@color/material_lime_500</item>
            <item name="dialogTheme">@style/AppTheme.Dialog.Legend</item>
            <item name="alertDialogTheme">@style/AppTheme.Dialog.Alert.Legend</item>
        </style>
    

    Layout:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView
        style="@style/CardStyle.Home"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/material_theme_progress_indicators"
                android:textAppearance="@style/TextStyle.Title"/>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/view_spacing_medium"
                android:text="@string/material_theme_stock"
                android:textAppearance="@style/TextStyle.Body2"/>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/view_spacing_small"
                android:gravity="center_vertical">
    
                <ProgressBar
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/view_spacing_small"
                    android:indeterminate="true"/>
    
                <ProgressBar
                    style="@style/ProgressBarStyle.Horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/view_spacing_small"
                    android:indeterminate="true"/>
            </LinearLayout>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/view_spacing_medium"
                android:text="@string/material_theme_material_progress"
                android:textAppearance="@style/TextStyle.Body2"/>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/view_spacing_small"
                android:gravity="center_vertical"
                android:theme="@style/AppTheme.Green">
    
                <me.zhanghai.android.materialprogressbar.MaterialProgressBar
                    style="@style/Widget.MaterialProgressBar.ProgressBar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/view_spacing_small"
                    android:indeterminate="true"/>
    
                <me.zhanghai.android.materialprogressbar.MaterialProgressBar
                    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/view_spacing_small"
                    app:mpb_progressStyle="horizontal"
                    android:indeterminate="true"/>
            </LinearLayout>
        </LinearLayout>
    </android.support.v7.widget.CardView>
    

    Tested on emulator API 25 and 16.

    opened by leinardi 13
Releases(v1.6.1)
Owner
Hai Zhang
Hai Zhang
Now deprecated. A small Android library allowing you to have a smooth and customizable horizontal indeterminate ProgressBar

Description Small library allowing you to make a smooth indeterminate progress bar. You can either user your progress bars and set this drawable or us

Antoine Merle 4.4k Dec 30, 2022
A beautiful, slim Android ProgressBar.

Android NumberProgressBar The NumberProgressBar is a bar, slim and sexy (every man wants! ). I decided to do this because I was really tired of androi

代码家 6k Jan 7, 2023
An android library to display a progressbar that goes around an image.

android-square-progressbar First things first This library is setup to work with the Android Studio and Gradle. If you're using the Eclipse environmen

Yannick Signer 1.3k Nov 15, 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
Holo Circular ProgressBar

HoloCircularProgressBar What is HoloCircularProgressBar HoloCircularProgressBar is a Custom View implementation for Android you might know from the An

Pascal Welsch 957 Nov 15, 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
Progressbar with whorl style

WhorlView 一个加载View 预览 使用 step1 添加gradle配置 dependencies { compile 'com.tt:whorlviewlibrary:1.0.3' } step2 在xml中添加WhorlView <com.tt.whorlviewli

AndroidKy 409 Dec 3, 2022
Android ProgressBar that "bends" under its own weight. Inspired by http://drbl.in/nwih

RopeProgressBar Android ProgressBar that "bends" under its own weight. Attributes Attribute Type Default Usage app:ropeMax integer 0 The max value of

Christian De Angelis 206 Dec 18, 2022
Android library to realize the various states and transitions in a ProgressBar.

StateProgressBar StateProgressBar is an Android library to realize the various states and transitions in a ProgressBar. Quick Start Get a feel of how

Kofi Gyan 1.5k Jan 9, 2023
ArcProgressbar project let create Arc progressbar in android in simplest way.

Arc Progressbar In Android ArcProgressbar project let create Arc progressbar in android in simplest way. USAGE To make a Arc Progressbar add ArcProgre

Manish 40 Dec 11, 2022
A loader that measures up Material Design

SpinnerLoader A loader that measures up Material Design. This is an implemention of http://t.co/sUuYTeKOzp Usage only one attribute point_color <com.f

Rongchan Liu 106 Jun 19, 2022
Material progress circle around any FloatingActionButton. 100% Guidelines.

FABProgressCircle Android library to provide a material progress circle around your FloatingActionButton. This component is compatible with any existe

Jorge Castillo 1.2k Nov 28, 2022
A material style progress wheel compatible with 2.3

![](https://img.shields.io/badge/Methods and size-106 | 12 KB-e91e63.svg) Material-ish Progress A material style progress wheel compatible with 2.3 Tr

Nico Hormazábal 2.5k Dec 28, 2022
Material Design ProgressBar with consistent appearance

MaterialProgressBar Material Design ProgressBar with consistent appearance on Android 4.0+. Why MaterialProgressBar? Consistent appearance on Android

Hai Zhang 2.2k Jan 1, 2023
Material Design ProgressBar with consistent appearance

MaterialProgressBar Material Design ProgressBar with consistent appearance on Android 4.0+. Why MaterialProgressBar? Consistent appearance on Android

Hai Zhang 2.2k Jan 1, 2023
Material Design RatingBar with better appearance

MaterialRatingBar Material Design RatingBar with better appearance, compatible with Android 3.0+. Why MaterialRatingBar? Consistent appearance on Andr

Hai Zhang 1.9k Dec 26, 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
A simple material-based support library to bring consistent SeekBars on Android 14 and above

SeekBarCompat A support library for the material design SeekBar in Android for API 14 and above. Screenshot On APIs 14 and above - Seekbars would look

Ahmed Rizwan 157 Dec 27, 2022
🕹️ See how the properties of Android's "shape" affect the Drawable's appearance, intuitively.

GradientDrawableTuner English | 中文 Get confusing about the drawable in Android? Try playing with GradientDrawableTuner! With the GradientDrawableTuner

Hong Duan 344 Nov 29, 2022
GreenDroid is a development library for the Android platform. It makes UI developments easier and consistent through your applications.

#GreenDroid Foreword : This project, initially initiated by me, Cyril Mottier, is not maintained anymore and can be considered as deprecated. As a con

Cyril Mottier 2.6k Jan 4, 2023