├── pb_empty.png
├── pb_full.png
├── .gitignore
├── pb_screenshot.png
├── res
├── drawable
│ ├── pb_empty.png
│ ├── pb_full.png
│ └── progress_bar.xml
├── values
│ ├── strings.xml
│ └── styles.xml
└── layout
│ └── main.xml
├── README.md
├── AndroidManifest.xml
├── src
└── main
│ └── java
│ └── net
│ └── grzechocinski
│ └── android
│ └── examples
│ ├── clipdrawable
│ ├── VerticalProgressBar.java
│ └── ProgressBarExampleActivity.java
│ └── domain
│ └── Percent.java
└── pom.xml
/pb_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mgrzechocinski/AndroidClipDrawableExample/HEAD/pb_empty.png
--------------------------------------------------------------------------------
/pb_full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mgrzechocinski/AndroidClipDrawableExample/HEAD/pb_full.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | bin/
3 | target/
4 | gen/
5 | local.properties
6 | default.properties
7 | *.iml
8 |
--------------------------------------------------------------------------------
/pb_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mgrzechocinski/AndroidClipDrawableExample/HEAD/pb_screenshot.png
--------------------------------------------------------------------------------
/res/drawable/pb_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mgrzechocinski/AndroidClipDrawableExample/HEAD/res/drawable/pb_empty.png
--------------------------------------------------------------------------------
/res/drawable/pb_full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mgrzechocinski/AndroidClipDrawableExample/HEAD/res/drawable/pb_full.png
--------------------------------------------------------------------------------
/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | AndroidClipDrawableExample
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/progress_bar.xml:
--------------------------------------------------------------------------------
1 |
2 | -
3 |
4 |
5 | -
6 |
10 |
11 |
--------------------------------------------------------------------------------
/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | AndroidClipDrawableExample
2 | ==========================
3 |
4 | Example of pretty simple implementation of progress bars in Android based on ClipDrawable
5 |
6 | ```xml
7 |
8 | -
9 |
10 |
11 | -
12 |
16 |
17 |
18 | ```
19 |
20 | ![Screenshot][1]
21 |
22 | [1]: https://raw.github.com/mgrzechocinski/AndroidClipDrawableExample/master/pb_screenshot.png
23 |
--------------------------------------------------------------------------------
/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/main/java/net/grzechocinski/android/examples/clipdrawable/VerticalProgressBar.java:
--------------------------------------------------------------------------------
1 | package net.grzechocinski.android.examples.clipdrawable;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.widget.ImageView;
6 | import java.math.BigDecimal;
7 | import net.grzechocinski.android.examples.domain.Percent;
8 |
9 | public class VerticalProgressBar extends ImageView {
10 |
11 | /**
12 | * @see ClipDrawable
13 | */
14 | private static final BigDecimal MAX = BigDecimal.valueOf(10000);
15 |
16 | public VerticalProgressBar(Context context, AttributeSet attributeSet) {
17 | super(context, attributeSet);
18 | setImageResource(R.drawable.progress_bar);
19 | }
20 |
21 | public void setCurrentValue(Percent percent){
22 | int cliDrawableImageLevel = percent.asBigDecimal().multiply(MAX).intValue();
23 | setImageLevel(cliDrawableImageLevel);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/net/grzechocinski/android/examples/domain/Percent.java:
--------------------------------------------------------------------------------
1 | package net.grzechocinski.android.examples.domain;
2 |
3 | import java.math.BigDecimal;
4 |
5 | public class Percent {
6 |
7 | public static final Percent PERCENT_0 = new Percent(0);
8 | public static final Percent PERCENT_25 = new Percent(25);
9 | public static final Percent PERCENT_50 = new Percent(50);
10 | public static final Percent PERCENT_75 = new Percent(75);
11 | public static final Percent PERCENT_100 = new Percent(100);
12 |
13 | public static final BigDecimal DIVISOR_PERCENT = new BigDecimal(100);
14 |
15 | private final int value;
16 |
17 | public Percent(int value) {
18 | if(value < 0 || value > 100){
19 | throw new IllegalArgumentException("Percentage value must be in <0;100> range");
20 | }
21 | this.value = value;
22 | }
23 |
24 | public int asIntValue() {
25 | return value;
26 | }
27 |
28 | public BigDecimal asBigDecimal() {
29 | return new BigDecimal(value).divide(DIVISOR_PERCENT);
30 | }
31 |
32 | @Override
33 | public String toString() {
34 | final StringBuilder sb = new StringBuilder("Percent{");
35 | sb.append("value=").append(value);
36 | sb.append('}');
37 | return sb.toString();
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/res/layout/main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
14 |
17 |
18 |
21 |
22 |
24 |
25 |
27 |
28 |
30 |
31 |
33 |
34 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 | net.grzechocinski.android.examples
6 | clip-drawable-example
7 | 1.0-SNAPSHOT
8 | apk
9 | clip-drawable-example
10 |
11 |
12 | 2.3.3
13 |
14 |
15 |
16 |
17 |
18 | com.google.android
19 | android
20 | ${platform.version}
21 | provided
22 |
23 |
24 |
25 |
26 |
27 |
28 | com.jayway.maven.plugins.android.generation2
29 | android-maven-plugin
30 | 3.1.1
31 |
32 | ${project.basedir}/AndroidManifest.xml
33 | ${project.basedir}/assets
34 | ${project.basedir}/res
35 | ${project.basedir}/src/main/native
36 |
37 | 10
38 |
39 | true
40 |
41 | true
42 |
43 |
44 |
45 | maven-compiler-plugin
46 | 2.3.2
47 |
48 | 1.6
49 | 1.6
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/src/main/java/net/grzechocinski/android/examples/clipdrawable/ProgressBarExampleActivity.java:
--------------------------------------------------------------------------------
1 | package net.grzechocinski.android.examples.clipdrawable;
2 |
3 | import android.app.Activity;
4 | import android.os.Bundle;
5 | import android.view.View;
6 | import android.widget.Button;
7 | import android.widget.TextView;
8 | import java.util.Random;
9 | import net.grzechocinski.android.examples.domain.Percent;
10 |
11 | public class ProgressBarExampleActivity extends Activity {
12 |
13 | public static final String PERCENT_CHAR = "%";
14 |
15 | public static final int MAX_PERCENT_RANDOM_VALUE = 100;
16 |
17 | private VerticalProgressBar progressBar;
18 |
19 | private Random random;
20 |
21 | private Button randomValueButton;
22 |
23 | private TextView progressValueTextView;
24 |
25 | @Override
26 | public void onCreate(Bundle savedInstanceState) {
27 | super.onCreate(savedInstanceState);
28 | setContentView(R.layout.main);
29 | random = new Random();
30 |
31 | progressBar = (VerticalProgressBar) findViewById(R.id.acd_id_proress_bar);
32 | randomValueButton = (Button) findViewById(R.id.acd_id_button_random);
33 | progressValueTextView = (TextView) findViewById(R.id.acd_id_proress_value);
34 |
35 | setupRandomProgressButton();
36 |
37 | setupStaticProgressButton(R.id.acd_id_button_25, Percent.PERCENT_25);
38 | setupStaticProgressButton(R.id.acd_id_button_50, Percent.PERCENT_50);
39 | setupStaticProgressButton(R.id.acd_id_button_75, Percent.PERCENT_75);
40 | setupStaticProgressButton(R.id.acd_id_button_100, Percent.PERCENT_100);
41 | }
42 |
43 | private void setupRandomProgressButton() {
44 | final Percent randomPercent = new Percent(random.nextInt(MAX_PERCENT_RANDOM_VALUE));
45 | randomValueButton.setText(randomPercent.asIntValue() + PERCENT_CHAR);
46 | randomValueButton.setOnClickListener(new View.OnClickListener() {
47 | @Override
48 | public void onClick(View view) {
49 | updateViews(randomPercent);
50 | setupRandomProgressButton();
51 | }
52 | });
53 | }
54 |
55 | private void setupStaticProgressButton(int buttonResId, final Percent percentToSet) {
56 | final Button button = (Button) findViewById(buttonResId);
57 | button.setText(percentToSet.asIntValue() + PERCENT_CHAR);
58 | button.setOnClickListener(new View.OnClickListener() {
59 | @Override
60 | public void onClick(View v) {
61 | updateViews(percentToSet);
62 | }
63 | });
64 | }
65 |
66 | private void updateViews(Percent randomPercent) {
67 | progressBar.setCurrentValue(randomPercent);
68 | progressValueTextView.setText(randomPercent.asIntValue() + PERCENT_CHAR);
69 | }
70 | }
71 |
--------------------------------------------------------------------------------