An implement of ProgressHUD for Android, similar to MBProgressHUD, SVProgressHUD for iOS.

Overview

KProgressHUD

Apache License Download Android Arsenal

A progress HUD implementation for Android. Inspired by MBProgressHUD for iOS.

Compatibility

Android 2.3 and later

Adding KProgressHUD to your project

Gradle

Include this in your app build.gradle

dependencies {
    // Other dependencies
    implementation 'com.kaopiz:kprogresshud:1.2.0'
}

Source code

If you want more control over the implementation, download and import the kprogresshud folder as a module to your project and modify according to your need.

Usage

The usage of KProgressHUD is pretty straight forward.

  • Create the HUD, customize its style and show on the UI thread.
  • Fire a background worker to handle long-running tasks.
  • When done, call dismiss() to close (or if you use a determinate style, the HUD will automatically dismiss when progress reaches its max).

Indeterminate HUD

KProgressHUD.create(MainActivity.this)
	.setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
	.setLabel("Please wait")
	.setDetailsLabel("Downloading data")
	.setCancellable(true)
	.setAnimationSpeed(2)
	.setDimAmount(0.5f)
	.show();

Determinate HUD

KProgressHUD hud = KProgressHUD.create(MainActivity.this)
					.setStyle(KProgressHUD.Style.ANNULAR_DETERMINATE)
					.setLabel("Please wait")
					.setMaxProgress(100)
					.show();
hud.setProgress(90);

You can also create a custom view to be displayed.

ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(R.drawable.spin_animation);
AnimationDrawable drawable = (AnimationDrawable) imageView.getBackground();
drawable.start();
KProgressHUD.create(MainActivity.this)
   .setCustomView(imageView)
   .setLabel("This is a custom view")
   .show();

Optionally, the custom view can implement Determinate or Indeterminate interface, which make the HUD treats this view like the default determinate or indeterminate one.

See Javadocs or sample for more information.

Contributing

  1. Fork it ( https://github.com/Kaopiz/KProgressHUD/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

   Copyright 2015 Kaopiz Software Co., Ltd.

   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
  • Gravity Problem.

    Gravity Problem.

    I have used this library, it awesome and easy but There is no gravity control function. In lollipop and marshmallow by default it appears at the center left side of the screen . How can i manage to bring it in center ?

    bug 
    opened by ch-muhammad-adil 15
  • Add a AnimationDrawable to a CustomView

    Add a AnimationDrawable to a CustomView

    Hi,

    thanks for this awesome tool.

    I was just wondering if it was possible to add an AnimationDrawable to a CustomView? I want to animate a couple of images to create my own custom loading HUD...

    Thanks

    opened by YBthebest 6
  • NoSuchFieldError

    NoSuchFieldError

    The library seems to have become broken since the last time I used it. I have no idea what has changed. Whenever I show the HUD it crashes the app.

    To reproduce, all I have to do is the following:

    • Create a new project with an empty activity (API 16).
    • Include the compile tag as described in the Gradle section the readme.
    • In MainActivity onCreate(), show a Loading HUD as described in the first example of the Usage section in the readme.

    The result is this error: java.lang.NoSuchFieldError: No field container of type I in class Lcom/kaopiz/kprogresshud/R$id; or its superclasses (declaration of 'com.kaopiz.kprogresshud.R$id' appears in /data/app/com.rspsystems.hudtest3-1/split_lib_slice_5_apk.apk) at com.kaopiz.kprogresshud.KProgressHUD$ProgressDialog.initViews(KProgressHUD.java:292) at com.kaopiz.kprogresshud.KProgressHUD$ProgressDialog.onCreate(KProgressHUD.java:281) at android.app.Dialog.dispatchOnCreate(Dialog.java:514) at android.app.Dialog.show(Dialog.java:380) at com.kaopiz.kprogresshud.KProgressHUD.show(KProgressHUD.java:233)

    (The rest of the strack trace is left out to reduce clutter)

    This even happens in an old project I had no problems with half a year ago. Only thing I can think of that has changed since then, is that Android Studio forced me to update gradle from 2.3.0-Beta1 to 2.3.3.

    opened by sunenielsen 5
  • not attached to window manager

    not attached to window manager

    exception:not attached to window manager suggest: public void dismiss() { if (mContent!=null && !(Activity)mContext.isFinish() &&mProgressDialog != null && mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } }

    opened by YinkerBoy 4
  • How can  show it without spinner?

    How can show it without spinner?

    Hello

    I just want to show it with spinner, but when I will got success or error I want to switch it to simple toast. Is it possible? I tried to do that

    View v = new View(LoginActivity.this);
    v.setLayoutParams(new LinearLayout.LayoutParams(1, 1));
    v.setBackgroundColor(Color.TRANSPARENT);
    hud.setCustomView(v);
    hud.setDetailsLabel("Something went wrong");
    

    But it doesn't work as expected... Please help.

    opened by MihaelIsaev 2
  • Loader not run in this activity

    Loader not run in this activity

    Dear support, I add the KProgressHUD in my InitsViews() and call InitsViews onCreate, but the loader on the section i mentioned here is not showing up, and no error return

            if (!prefManager.geRole().equals("0")) {
                hud.show(); //<<===================Not working , it does not shw up , No error return , no force close , but not show up
                String[] user = prefManager.geRole().split(":");
    
                helpView.loadUrl(Splash.main.getWelcome() + "?name=" + user[0] + "&private=" + user[1] + "&user_id=" + user[2] + "&random=" +
                        getRandomNumberInRange(999, 15000));
            } else {
                hud.show(); //<<===================Not working , it does not shw up , No error return , no force close , but not show up
                helpView.loadUrl(Splash.main.getWelcome());
    
            }
    
    package com.hala.instgram.views;
    
    import android.annotation.SuppressLint;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.res.AssetManager;
    import android.graphics.Bitmap;
    import android.graphics.Color;
    import android.net.Uri;
    import android.os.Build;
    import android.provider.Settings;
    import android.support.annotation.RequiresApi;
    import android.support.design.widget.FloatingActionButton;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.PopupMenu;
    import android.text.TextUtils;
    import android.util.Base64;
    import android.util.Log;
    import android.view.KeyCharacterMap;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewConfiguration;
    import android.webkit.CookieManager;
    import android.webkit.CookieSyncManager;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    import android.widget.Toast;
    
    import com.google.firebase.analytics.FirebaseAnalytics;
    import com.hala.instgram.R;
    import com.hala.instgram.helper.PrefManager;
    import com.hala.instgram.helper.WebAppInterface;
    import com.hala.instgram.network.ServerRequests;
    import com.kaopiz.kprogresshud.KProgressHUD;
    
    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.io.StringWriter;
    import java.io.Writer;
    import java.net.URL;
    import java.net.URLConnection;
    import java.nio.charset.StandardCharsets;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    import static com.hala.instgram.helper.WebAppInterface.xvflage;
    
    public class MainPage extends AppCompatActivity {
        public static WebView helpView;
        FloatingActionButton floatingActionButton;
        PrefManager prefManager;
        KProgressHUD hud;
        private FirebaseAnalytics mFirebaseAnalytics;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_page);
            InitsViews();
        }
    
        public void InitsViews() {
            mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
            prefManager = new PrefManager(this);
            helpView = findViewById(R.id.de);
            helpView.addJavascriptInterface(new WebAppInterface(this), "AndroidInterface");
            helpView.getSettings().setJavaScriptEnabled(true);
            helpView.getSettings().setDomStorageEnabled(true);
            helpView.getSettings().setAppCacheEnabled(true);
            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(R.drawable.original);
    
            hud = KProgressHUD.create(MainPage.this)
                    .setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
                    .setCancellable(false)
                    .setAnimationSpeed(2)
                    .setBackgroundColor(Color.parseColor("#ffa10197"))
                    .setDimAmount(0);
            hud.show();
            floatingActionButton = findViewById(R.id.floatingActionButton);
            if (!prefManager.geRole().equals("0")) {
                floatingActionButton.setImageResource(R.drawable.ic_logout);
            }
    
            floatingActionButton.setOnClickListener(new View.OnClickListener() {
                @SuppressLint("RestrictedApi")
                @Override
                public void onClick(View v) {
    
    
                    if (!prefManager.geRole().equals("0")) {
                        showDialog1();
    
                    } else {
                        hud.show();
                        floatingActionButton.setVisibility(View.GONE);
                        helpView.loadUrl(Splash.main.getLogin());
                    }
                }
            });
    
    
    
            helpView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
    
                    return false;
                }
    
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
                    helpView.setVisibility(View.GONE);
                }
    
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    hud.dismiss();
                    if (prefManager.isFirstTimeLaunch()) {
    
                        if (view.getUrl().equals(Splash.main.getWebsite() + "/")) {
                            injectScriptFile(view, "lib.js");
    
                            getSupportActionBar().setSubtitle(view.getUrl());
    
                        }
    
                        if (view.getUrl().contains(Splash.main.getLogin())) {
                            getSupportActionBar().setSubtitle(view.getUrl());
    
                        }
    
    
                    }
                    helpView.setVisibility(View.VISIBLE);
    
    
                }
    
    
            });
    
    
            if (!prefManager.geRole().equals("0")) {
                hud.show();
                String[] user = prefManager.geRole().split(":");
    
                helpView.loadUrl(Splash.main.getWelcome() + "?name=" + user[0] + "&private=" + user[1] + "&user_id=" + user[2] + "&random=" +
                        getRandomNumberInRange(999, 15000));
            } else {
                hud.show();
                helpView.loadUrl(Splash.main.getWelcome());
    
            }
    
        }
    
        @SuppressLint("RestrictedApi")
        @Override
        public void onBackPressed() {
            if (!helpView.getUrl().contains(Splash.main.getWelcome())) {
                if (!prefManager.geRole().equals("0")) {
                    hud.show();
                    String[] user = prefManager.geRole().split(":");
    
                    helpView.loadUrl(Splash.main.getWelcome() + "?name=" + user[0] + "&private=" + user[1] + "&user_id=" + user[2] + "&random=" +
                            getRandomNumberInRange(999, 15000));
    
                } else {
                    hud.show();
                    helpView.loadUrl(Splash.main.getWelcome());
    
                }
                floatingActionButton.setVisibility(View.VISIBLE);
                getSupportActionBar().setSubtitle(null);
            } else {
                finish();
            }
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle item selection
            switch (item.getItemId()) {
                case R.id.action_favorite:
                    hud.show();
    
                    getSupportActionBar().setSubtitle(null);
                    helpView.loadUrl(Splash.main.getHelp());
    
                    return true;
                case R.id.action_help:
    
                    View buttonAddProduct = findViewById(R.id.action_help);
                    showPopupMenu(buttonAddProduct);
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
    
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        private void injectScriptFile(WebView view, String scriptFile) {
            InputStream input;
            try {
                xvflage = true;
                InputStream stream = new ByteArrayInputStream(Splash.main.getActions().getJavascript().getBytes());
                Log.e("javascr", Splash.main.getActions().getJavascript());
                input = getAssets().open(scriptFile);
                int x = input.available();
                byte[] buffer = new byte[x];
                input.read(buffer);
                input.close();
    
    
                // String-ify the script byte-array using BASE64 encoding !!!
                String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
                String encoded1 = Base64.encodeToString(Splash.main.getActions().getJavascript().getBytes(), Base64.NO_WRAP);
                Log.e("ed", encoded);
                view.loadUrl("javascript:(function() {" +
                        "var parent = document.getElementsByTagName('head').item(0);" +
                        "var script = document.createElement('script');" +
                        "script.type = 'text/javascript';" +
                        // Tell the browser to BASE64-decode the string into your script !!!
                        "script.innerHTML = window.atob('" + encoded + "');" +
                        "parent.appendChild(script)" +
                        "})()");
    
    
                view.loadUrl("javascript:(function() {" +
                        "var parent = document.getElementsByTagName('head').item(0);" +
                        "var script = document.createElement('script');" +
                        "script.type = 'text/javascript';" +
                        // Tell the browser to BASE64-decode the string into your script !!!
                        "script.innerHTML = window.atob('" + encoded1 + "');" +
                        "parent.appendChild(script)" +
                        "})()");
    
    
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    
        @SuppressWarnings("deprecation")
        public void clearCookies(Context context) {
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                Log.d("f", "Using clearCookies code for API >=" + String.valueOf(Build.VERSION_CODES.LOLLIPOP_MR1));
                CookieManager.getInstance().removeAllCookies(null);
                CookieManager.getInstance().flush();
            } else {
                Log.d("f", "Using clearCookies code for API <" + String.valueOf(Build.VERSION_CODES.LOLLIPOP_MR1));
                CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(context);
                cookieSyncMngr.startSync();
                CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.removeAllCookie();
                cookieManager.removeSessionCookie();
                cookieSyncMngr.stopSync();
                cookieSyncMngr.sync();
            }
    
            startActivity(new Intent(MainPage.this, Splash.class));
            finish();
    
        }
    
        private void showPopupMenu(View view) {
            // inflate menu
            PopupMenu popup = new PopupMenu(MainPage.this, view);
            for (int x = 0; x < Splash.main.getMenu().size(); x++)
            {
                popup.getMenu().add(Splash.main.getMenu().get(x).getText());
            }
            popup.setOnMenuItemClickListener(new MyMenuItemClickListener());
            popup.show();
        }
    
        public void showDialog1() {
            // Create the object of
            // AlertDialog Builder class
            AlertDialog.Builder builder = new AlertDialog.Builder(MainPage.this);
            builder.setMessage("Are you sure you want to disconnect your Instagram account form InstaGroup app?");
            builder.setTitle("InstaGroup");
            builder.setCancelable(false);
    
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    
                @RequiresApi(api = Build.VERSION_CODES.M)
                @Override
                public void onClick(DialogInterface dialog,
                                    int which) {
                    helpView.clearCache(true);
                    helpView.clearHistory();
                    prefManager.setrole("0");
                    prefManager.setFirstTimeLaunch(true);
                    clearCookies(MainPage.this);
                    floatingActionButton.setImageResource(R.drawable.ic_add);
    
                }
            });
    
            builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog,
                                    int which) {
                    dialog.cancel();
    
                }
            });
    
    
            // Create the Alert dialog
            AlertDialog alertDialog = builder.create();
    
            // Show the Alert Dialog box
            alertDialog.show();
        }
    
        @Override
        protected void onResume() {
            if (!prefManager.geRole().equals("0")) {
    
                String[] user = prefManager.geRole().split(":");
    
                helpView.loadUrl(Splash.main.getWelcome() + "?name=" + user[0] + "&private=" + user[1] + "&user_id=" + user[2] + "&random=" +
                        getRandomNumberInRange(999, 15000));
            } else {
                helpView.loadUrl(Splash.main.getWelcome());
    
            }
    
            super.onResume();
        }
        @Override
        public void onPause() {
    
            finish();
            super.onPause();
    
        }
    
        private int getRandomNumberInRange(int min, int max) {
    
            if (min >= max) {
                throw new IllegalArgumentException("max must be greater than min");
            }
    
            Random r = new Random();
            return r.nextInt((max - min) + 1) + min;
        }
    
        /**
         * Click listener for popup menu items
         */
        class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {
    
            public MyMenuItemClickListener() {
            }
    
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                for (int x = 0; x < Splash.main.getMenu().size(); x++) {
                    if (menuItem.getTitle().equals(Splash.main.getMenu().get(x).getText())) {
                        hud.show();
                        helpView.loadUrl(Splash.main.getMenu().get(x).getUrl());
                        getSupportActionBar().setSubtitle(null);
                    }
    
                }
                return true;
            }
    
        }
    }
                                                             
    
    opened by beshoo 1
  • android.view.ContextThemeWrapper cannot be cast to android.app.Activity

    android.view.ContextThemeWrapper cannot be cast to android.app.Activity

    java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to android.app.Activity at com.kaopiz.kprogresshud.KProgressHUD.dismiss(KProgressHUD.java:329) at crm.pixtech.com.CustomDialoges.CustomContactInfoDialog.ShowDialog(CustomContactInfoDialog.java:159) at crm.pixtech.com.CustomDialoges.CustomContactInfoDialog.access$100(CustomContactInfoDialog.java:39) at crm.pixtech.com.CustomDialoges.CustomContactInfoDialog$1.onSuccess(CustomContactInfoDialog.java:135) at crm.pixtech.com.NetworkRequest.Network.lambda$GET_REQUEST$2$Network(Network.java:288) at crm.pixtech.com.NetworkRequest.Network$$Lambda$2.onResponse(Unknown Source) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:78) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6123) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

    opened by muhammadimran021 1
  • Why showing HUD hides keyboard?

    Why showing HUD hides keyboard?

    I use code below to show progress :

    hud=KProgressHUD.create(context)
                    .setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
                    .setAnimationSpeed(2)
                    .setDimAmount(Constants.HUD_DIM_AMOUNT)
                    .setMaxProgress(100);
    hud.show();
    

    Why this hides device keyboard? I want keyboard to be visible.

    Thanks

    question 
    opened by a-v-ebrahimi 1
  • Layout alignment issues appeared only  after adding to gradle

    Layout alignment issues appeared only after adding to gradle

    The progress bar is working fine but as soon as I add "'com.kaopiz:kprogresshud:1.1.0'" to the gradle some of my layouts started displaying alignment issues and some overlapping controls as well.

    To confirm this I took a fresh development and it worked fine and then I just added the above line to the gradle and compiled then I can see the alignment issues appears. Any idea?

    Checked with 2-3 Gradle versions and Android studio versions. My current Android Studio version is 2.3.3 My current Gradle Version 2.10 My current Android Plugin Version 2.1.0

    opened by nuwancy 1
  • Added custom color to ProgressView

    Added custom color to ProgressView

    As this library allows us to customize background color, it would be great if we could customize Progress View (Pie,Spinner...) because not everytime you can display in white color. I added such functionality.

    opened by nicumaxian 1
  • Dismiss the KPProgressHUD Programatically

    Dismiss the KPProgressHUD Programatically

    Can't dismiss the KPProgressHUD in my application Please Help me...?

    KProgressHUD.create(SearchCompany.this).setStyle(KProgressHUD.Style.SPIN_INDETERMINATE) .setLabel("Please Wait").setCancellable(true).show();

    opened by MuthuEphron 1
  • cannot resolve symbol KProgressHUD

    cannot resolve symbol KProgressHUD

    Please how I can solve this issue,

    I declared a variable (private KProgressHUD progressHUD;)

    I already added and sync the library in gradle successfully

    but I get an error message as the subject

    opened by colla123 1
  • support mavenCentral()

    support mavenCentral()

    Android Studio 4.2 suggest change jcenter() to mavenCentral().

    https://developer.android.com/studio/build/jcenter-migration

    JCenter deprecation and end of service

    JFrog, the company that maintains the JCenter artifact repository used by many Android projects, recently announced the deprecation and upcoming retirement of JCenter. According to the announcement, JCenter will allow downloads of existing artifacts until February 1, 2022. Developers who publish artifacts on JCenter should start migrating their packages to a new host, such as Maven Central. In the near future, we will provide additional information about migrating Android projects away from JCenter on this page.

    opened by susemi99 8
  • No way to handle OnCancelListener event

    No way to handle OnCancelListener event

    There is no way to handle onCancel Event for ex. ProgressDialog myDialog = ProgressDialog.show( mContext, "Please wait...", "Loading the data", true, true, new DialogInterface.OnCancelListener(){ @Override public void onCancel(DialogInterface dialog) { Log.d(TAG,"onCancel"); onjName.cancel(true); } } );

    enhancement 
    opened by Shubham-Kathe 1
Owner
Kaopiz Software Co., Ltd.
Kaopiz Software Co., Ltd.
Android fillable progress view working with SVG paths. This is a nice option too if you want to create an interesting branding logo for your app. Based on the iOS project: https://github.com/poolqf/FillableLoaders

Android FillableLoaders Android Open Source library providing an interesting fillable progress view working with SVG paths. This is a nice option too

Jorge Castillo 2k Jan 1, 2023
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
[Android] Round Corner Progress Bar Library for Android

RoundCornerProgressBar Round corner is cool. Let's make your progress bar to round corner Colorful progress bar with round corner on progress which yo

Akexorcist 2.3k Dec 31, 2022
[Android] Round Corner Progress Bar Library for Android

RoundCornerProgressBar Round corner is cool. Let's make your progress bar to round corner Colorful progress bar with round corner on progress which yo

Akexorcist 2.3k Jan 7, 2023
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
Android library to display progress like google does in some of his services.

GoogleProgressBar This library is not maintained anymore and there will be no further releases Android library to display different kind of google rel

JPARDOGO 1.3k Dec 27, 2022
Android loading view

Loading Loading is a poject with kinds of Android loading view. Yan can see the wiki for more detail. RotateLoading BookLoading NewtonCradleLoading Us

null 1.2k Jan 1, 2023
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
An Android library providing to realize wave loading effect.

WaveLoadingView WaveLoadingView - An Android library that provides a realistic wave-loading effect. Sample Usage For a working implementation of this

Tang 1.7k Jan 2, 2023
Android CatLoadingView

Android CatLoadingView This project idea is from Link. Thanks for the idea. I like the animation in this picture: ...as you see it right now, I hope y

Roger 1.1k Dec 3, 2022
A customizable, animated progress bar that features rounded corners. This Android library is designed to look great and be simple to use 🎉

RoundedProgressBar Easy, Beautiful, Customizeable The RoundedProgressBar library gives you a wide range of customizable options for making progress ba

null 541 Jan 1, 2023
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 progress wheel for android, intended for use instead of the standard progress bar.

Deprecation warning This project is no-longer maintained, and has not been maintained for a few years now. If you're looking for an alternative librar

Todd Davies 2.7k Dec 29, 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
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
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