├── .gitignore ├── LICENSE.md ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── silvestr │ │ └── dotprogressbarexample │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── silvestr │ │ └── dotprogressbarexample │ │ ├── MainActivity.java │ │ └── SecondActivity.java │ └── res │ ├── layout │ ├── activity_main.xml │ └── second_activity.xml │ ├── menu │ └── menu_main.xml │ ├── mipmap-hdpi │ ├── ic_account_circle_black_48dp.png │ └── ic_launcher.png │ ├── mipmap-mdpi │ ├── ic_account_circle_black_48dp.png │ └── ic_launcher.png │ ├── mipmap-xhdpi │ ├── ic_account_circle_black_48dp.png │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ ├── ic_account_circle_black_48dp.png │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ ├── ic_account_circle_black_48dp.png │ └── ic_launcher.png │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── dot-progress-bar ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── github │ │ └── silvestrpredko │ │ └── dotprogressbar │ │ ├── AnimationListener.java │ │ ├── DotProgressBar.java │ │ └── DotProgressBarBuilder.java │ └── res │ └── values │ ├── attrs.xml │ ├── colors.xml │ └── strings.xml └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | ############################### 2 | ### Project files 3 | ############################## 4 | *.obb 5 | *.zip 6 | 7 | ############################### 8 | ### OS temporary files 9 | ############################### 10 | ### Windows 11 | Thumbs.db 12 | Desktop.ini 13 | *.exe 14 | *.msi 15 | ### Linux 16 | *~ 17 | .directory 18 | ### OS X 19 | .DS_Store 20 | .AppleDouble 21 | .LSOverride 22 | .Spotlight-V100 23 | .Trashes 24 | ._* 25 | 26 | ### Java generated files 27 | *.class 28 | *.jar 29 | !*/libs/*.jar 30 | *.war 31 | *.ear 32 | *.apk 33 | *.alloc 34 | 35 | ### VM crash logs 36 | hs_err_pid* 37 | 38 | ### Hibernate MetaModels 39 | *_.java 40 | 41 | ## GWT 42 | war/ 43 | html/war/gwt_bree/ 44 | html/gwt-unitCache/ 45 | .apt_generated/ 46 | html/war/WEB-INF/deploy/ 47 | html/war/WEB-INF/classes/ 48 | .gwt/ 49 | gwt-unitCache/ 50 | www-test/ 51 | .gwt-tmp/ 52 | 53 | ### JBoss 54 | jboss/server/all/deploy/project.ext 55 | jboss/server/default/deploy/project.ext 56 | jboss/server/minimal/deploy/project.ext 57 | jboss/server/all/log/*.log 58 | jboss/server/all/tmp/**/* 59 | jboss/server/all/data/**/* 60 | jboss/server/all/work/**/* 61 | jboss/server/default/log/*.log 62 | jboss/server/default/tmp/**/* 63 | jboss/server/default/data/**/* 64 | jboss/server/default/work/**/* 65 | jboss/server/minimal/log/*.log 66 | jboss/server/minimal/tmp/**/* 67 | jboss/server/minimal/data/**/* 68 | jboss/server/minimal/work/**/* 69 | 70 | *.DEPLOYED 71 | 72 | ##################################### 73 | ### Build Systems 74 | ##################################### 75 | 76 | ### Ant 77 | gen/ 78 | 79 | ### Maven 80 | target/ 81 | pom.xml.tag 82 | pom.xml.releaseBackup 83 | pom.xml.versionsBackup 84 | pom.xml.next 85 | release.properties 86 | 87 | ### Gradle 88 | .gradle 89 | build/ 90 | android/libs/armeabi/ 91 | android/libs/armeabi-v7a/ 92 | android/libs/x86/ 93 | android/gen/ 94 | 95 | gradle/ 96 | gradlew* 97 | gradle.properties 98 | 99 | # Ignore Gradle GUI config 100 | gradle-app.setting 101 | 102 | ###################################### 103 | ### IDE 104 | ###################################### 105 | 106 | ### JetBrains IDEs 107 | .idea/ 108 | *.ipr 109 | *.iml 110 | *.iws 111 | 112 | out/ 113 | 114 | .idea_modules/ 115 | atlassian-ide-plugin.xml 116 | com_crashlytics_export_strings.xml 117 | 118 | ### Eclipse 119 | *.pydevproject 120 | .metadata 121 | .classpath 122 | .project 123 | bin/ 124 | tmp/ 125 | *.tmp 126 | *.bak 127 | *.swp 128 | *~.nib 129 | local.properties 130 | .settings/ 131 | .loadpath 132 | 133 | # External tool builders 134 | .externalToolBuilders/ 135 | 136 | # Locally stored "Eclipse launch configurations" 137 | *.launch 138 | 139 | # CDT-specific 140 | .cproject 141 | 142 | # PDT-specific 143 | .buildpath 144 | 145 | # sbteclipse plugin 146 | .target 147 | 148 | ### NetBeans 149 | nbproject/private 150 | nbbuild/ 151 | dist/ 152 | nbdist/ 153 | nbactions.xml 154 | nb-configuration.xml 155 | Logic/target/ 156 | 157 | #### Diff temporary files 158 | *.orig 159 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Predko Silvestr 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **DotProgressBar** 2 | =================== 3 | 4 | ### It`s a simple progress bar. 5 | 6 | ## **Example** ## 7 | 8 | ![enter image description here](https://lh3.googleusercontent.com/3E5v7TkH0DxXcdBI2pjJa9AVaogX2Kknh700wqt9wx8=s0 "DotProgressBar.gif") 9 | 10 | [![enter image description here](http://style.anu.edu.au/_anu/images/icons/icon-google-play-small.png)](https://play.google.com/store/apps/details?id=com.silvestr.dotprogressbarexample&hl=en) 11 | 12 | [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-DotProgressBar-green.svg?style=true)](https://android-arsenal.com/details/1/3340) 13 | 14 | ### **Gradle** 15 | ```groovy 16 | compile 'com.github.silvestrpredko:dot-progress-bar:1.1' 17 | ``` 18 | 19 | ## **Usage** ## 20 | #### **XML** 21 | ```xml 22 | 31 | ``` 32 | #### **Code** 33 | ```java 34 | dotProgressBar.setStartColor(startColor); 35 | dotProgressBar.setEndColor(endColor); 36 | dotProgressBar.setDotAmount(amount); 37 | dotProgressBar.setAnimationTime(time); 38 | 39 | // or you can use builder 40 | 41 | new DotProgressBarBuilder(this) 42 | .setDotAmount(5) 43 | .setStartColor(Color.BLACK) 44 | .setAnimationDirection(DotProgressBar.LEFT_DIRECTION) 45 | .build(); 46 | ``` 47 | 48 | ### [License](./LICENSE.md) 49 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "24.0.2" 6 | 7 | lintOptions { 8 | abortOnError false 9 | } 10 | 11 | defaultConfig { 12 | applicationId "com.silvestr.dotprogressbarexample" 13 | minSdkVersion 15 14 | targetSdkVersion 25 15 | versionCode 3 16 | versionName "1.2" 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | } 25 | 26 | dependencies { 27 | compile project(':dot-progress-bar') 28 | compile 'com.github.bumptech.glide:glide:3.7.0' 29 | compile 'com.android.support:support-v4:25.1.0' 30 | compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' 31 | } 32 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /home/silvestr/Android/Sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/silvestr/dotprogressbarexample/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.silvestr.dotprogressbarexample; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/silvestr/dotprogressbarexample/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.silvestr.dotprogressbarexample; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.graphics.Bitmap; 6 | import android.graphics.BitmapShader; 7 | import android.graphics.Canvas; 8 | import android.graphics.Paint; 9 | import android.net.Uri; 10 | import android.os.Build; 11 | import android.os.Bundle; 12 | import android.support.v4.content.ContextCompat; 13 | import android.support.v7.app.AppCompatActivity; 14 | import android.support.v7.widget.Toolbar; 15 | import android.view.Gravity; 16 | import android.view.View; 17 | import android.view.ViewGroup; 18 | import android.widget.Button; 19 | import android.widget.FrameLayout; 20 | import android.widget.ImageView; 21 | 22 | import com.bumptech.glide.Glide; 23 | import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; 24 | import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; 25 | import com.github.silvestrpredko.dotprogressbar.DotProgressBar; 26 | import com.github.silvestrpredko.dotprogressbar.DotProgressBarBuilder; 27 | 28 | public class MainActivity extends AppCompatActivity { 29 | 30 | DotProgressBar dotProgressBar; 31 | 32 | @Override 33 | protected void onCreate(Bundle savedInstanceState) { 34 | super.onCreate(savedInstanceState); 35 | setContentView(R.layout.activity_main); 36 | 37 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 38 | getWindow().setStatusBarColor(getResources().getColor(R.color.indigo_700)); 39 | } 40 | 41 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 42 | toolbar.setTitleTextColor(getResources().getColor(R.color.indigo_50)); 43 | setSupportActionBar(toolbar); 44 | 45 | getSupportActionBar().setTitle(getString(R.string.app_name)); 46 | ImageView profileImageView = (ImageView) findViewById(R.id.imageView); 47 | final Button btnChangeVisibility = (Button) findViewById(R.id.btn_visibility); 48 | final Button btnChangeAnimationDirection = (Button) findViewById(R.id.btn_direction); 49 | final Button btnGoToNextActivity = (Button) findViewById(R.id.btnGoToNextActivity); 50 | dotProgressBar = (DotProgressBar) findViewById(R.id.dot_progress_bar); 51 | 52 | btnChangeVisibility.setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View view) { 55 | if (dotProgressBar.getVisibility() == View.VISIBLE) { 56 | dotProgressBar.setVisibility(View.INVISIBLE); 57 | } else { 58 | dotProgressBar.setVisibility(View.VISIBLE); 59 | } 60 | } 61 | }); 62 | 63 | btnChangeAnimationDirection.setOnClickListener(new View.OnClickListener() { 64 | @Override 65 | public void onClick(View view) { 66 | if (dotProgressBar.getAnimationDirection() < 0) { 67 | dotProgressBar.changeAnimationDirection(DotProgressBar.RIGHT_DIRECTION); 68 | } else { 69 | dotProgressBar.changeAnimationDirection(DotProgressBar.LEFT_DIRECTION); 70 | } 71 | } 72 | }); 73 | 74 | btnGoToNextActivity.setOnClickListener(new View.OnClickListener() { 75 | @Override 76 | public void onClick(View view) { 77 | startActivity(new Intent(MainActivity.this, SecondActivity.class)); 78 | } 79 | }); 80 | 81 | final FrameLayout progressBarContainer = 82 | (FrameLayout) findViewById(R.id.container); 83 | 84 | DotProgressBarBuilder builder = new DotProgressBarBuilder(this); 85 | builder.setStartColor(ContextCompat.getColor(this, R.color.deep_purple_800)) 86 | .setEndColor(ContextCompat.getColor(this, R.color.deep_purple_400)) 87 | .setAnimationDirection(DotProgressBar.LEFT_DIRECTION) 88 | .setDotAmount(7); 89 | 90 | progressBarContainer.addView( 91 | builder.build(), 92 | new FrameLayout.LayoutParams( 93 | ViewGroup.LayoutParams.MATCH_PARENT, 94 | 150, 95 | Gravity.CENTER 96 | ) 97 | ); 98 | 99 | Uri uri = Uri.parse("http://i1.wp.com/cdn.techreviewpro.com//2015/03/Amazing-WhatsApp-DP-Wonderful-Stylish-Girls-for-fb-Profile-Picture.jpg"); 100 | Glide.with(this).load(uri) 101 | .transform(new CircleTransform(this)) 102 | .placeholder(getResources().getDrawable(R.mipmap.ic_account_circle_black_48dp)) 103 | .into(profileImageView); 104 | } 105 | 106 | static class CircleTransform extends BitmapTransformation { 107 | public CircleTransform(Context context) { 108 | super(context); 109 | } 110 | 111 | private static Bitmap circleCrop(BitmapPool pool, Bitmap source) { 112 | if (source == null) return null; 113 | 114 | int size = Math.min(source.getWidth(), source.getHeight()); 115 | int x = (source.getWidth() - size) / 2; 116 | int y = (source.getHeight() - size) / 2; 117 | 118 | Bitmap squared = Bitmap.createBitmap(source, x, y, size, size); 119 | 120 | Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888); 121 | if (result == null) { 122 | result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); 123 | } 124 | 125 | Canvas canvas = new Canvas(result); 126 | Paint paint = new Paint(); 127 | paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); 128 | paint.setAntiAlias(true); 129 | float r = size / 2f; 130 | canvas.drawCircle(r, r, r, paint); 131 | return result; 132 | } 133 | 134 | @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { 135 | return circleCrop(pool, toTransform); 136 | } 137 | 138 | @Override public String getId() { 139 | return getClass().getName(); 140 | } 141 | } 142 | 143 | @Override 144 | public void onAttachedToWindow() { 145 | super.onAttachedToWindow(); 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /app/src/main/java/com/silvestr/dotprogressbarexample/SecondActivity.java: -------------------------------------------------------------------------------- 1 | package com.silvestr.dotprogressbarexample; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v7.app.AppCompatActivity; 6 | 7 | /** 8 | * @author silvestr.predko 9 | */ 10 | 11 | public class SecondActivity extends AppCompatActivity { 12 | 13 | @Override 14 | protected void onCreate(@Nullable Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | setContentView(R.layout.second_activity); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | 19 | 31 | 32 | 45 | 46 | 56 | 57 | 68 | 69 |