From 7e3a6b09ae9fb76eebf5948e75396523cdb2fc34 Mon Sep 17 00:00:00 2001 From: zedoref Date: Mon, 28 Dec 2015 19:03:29 +0200 Subject: [PATCH] Progress state button color support #35 --- .../com/dd/processbutton/ProcessButton.java | 38 +++++++++++++------ .../iml/ActionProcessButton.java | 8 ++-- .../iml/GenerateProcessButton.java | 4 +- .../iml/SubmitProcessButton.java | 4 +- .../src/main/res/drawable/rect_progress.xml | 2 +- .../main/res/drawable/rect_progress_line.xml | 7 ++++ library/src/main/res/values/colors.xml | 3 +- library/src/main/res/values/styles.xml | 1 + sample/src/main/res/layout/ac_sign_in.xml | 3 +- 9 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 library/src/main/res/drawable/rect_progress_line.xml diff --git a/library/src/main/java/com/dd/processbutton/ProcessButton.java b/library/src/main/java/com/dd/processbutton/ProcessButton.java index 8bedff5..feb006f 100644 --- a/library/src/main/java/com/dd/processbutton/ProcessButton.java +++ b/library/src/main/java/com/dd/processbutton/ProcessButton.java @@ -3,6 +3,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; +import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.os.Parcel; import android.os.Parcelable; @@ -14,9 +15,10 @@ public abstract class ProcessButton extends FlatButton { private int mMaxProgress; private int mMinProgress; - private GradientDrawable mProgressDrawable; + private GradientDrawable mProgressLineDrawable; private GradientDrawable mCompleteDrawable; private GradientDrawable mErrorDrawable; + private GradientDrawable mProgressDrawable; private CharSequence mLoadingText; private CharSequence mCompleteText; @@ -41,8 +43,8 @@ private void init(Context context, AttributeSet attrs) { mMinProgress = 0; mMaxProgress = 100; - mProgressDrawable = (GradientDrawable) getDrawable(R.drawable.rect_progress).mutate(); - mProgressDrawable.setCornerRadius(getCornerRadius()); + mProgressLineDrawable = (GradientDrawable) getDrawable(R.drawable.rect_progress_line).mutate(); + mProgressLineDrawable.setCornerRadius(getCornerRadius()); mCompleteDrawable = (GradientDrawable) getDrawable(R.drawable.rect_complete).mutate(); mCompleteDrawable.setCornerRadius(getCornerRadius()); @@ -67,9 +69,9 @@ private void initAttributes(Context context, AttributeSet attributeSet) { mCompleteText = attr.getString(R.styleable.ProcessButton_pb_textComplete); mErrorText = attr.getString(R.styleable.ProcessButton_pb_textError); - int purple = getColor(R.color.purple_progress); - int colorProgress = attr.getColor(R.styleable.ProcessButton_pb_colorProgress, purple); - mProgressDrawable.setColor(colorProgress); + int purple = getColor(R.color.purple_progress_line); + int colorProgressLine = attr.getColor(R.styleable.ProcessButton_pb_colorProgressLine, purple); + mProgressLineDrawable.setColor(colorProgressLine); int green = getColor(R.color.green_complete); int colorComplete = attr.getColor(R.styleable.ProcessButton_pb_colorComplete, green); @@ -79,6 +81,12 @@ private void initAttributes(Context context, AttributeSet attributeSet) { int colorError = attr.getColor(R.styleable.ProcessButton_pb_colorError, red); mErrorDrawable.setColor(colorError); + if (attr.hasValue(R.styleable.ProcessButton_pb_colorProgress)) { + mProgressDrawable = (GradientDrawable) getDrawable(R.drawable.rect_progress).mutate(); + mProgressDrawable.setCornerRadius(getCornerRadius()); + mProgressDrawable.setColor(attr.getColor(R.styleable.ProcessButton_pb_colorProgress, getColor(R.color.blue_normal))); + } + } finally { attr.recycle(); } @@ -111,7 +119,7 @@ protected void onProgress() { if(getLoadingText() != null) { setText(getLoadingText()); } - setBackgroundCompat(getNormalDrawable()); + setBackgroundCompat(getProgressDrawable()); } protected void onCompleteState() { @@ -152,14 +160,18 @@ public int getMinProgress() { return mMinProgress; } - public GradientDrawable getProgressDrawable() { - return mProgressDrawable; + public GradientDrawable getProgressLineDrawable() { + return mProgressLineDrawable; } public GradientDrawable getCompleteDrawable() { return mCompleteDrawable; } + public Drawable getProgressDrawable() { + return mProgressDrawable == null ? getNormalDrawable() : mProgressDrawable; + } + public CharSequence getLoadingText() { return mLoadingText; } @@ -168,14 +180,18 @@ public CharSequence getCompleteText() { return mCompleteText; } - public void setProgressDrawable(GradientDrawable progressDrawable) { - mProgressDrawable = progressDrawable; + public void setProgressLineDrawable(GradientDrawable progressLineDrawable) { + mProgressLineDrawable = progressLineDrawable; } public void setCompleteDrawable(GradientDrawable completeDrawable) { mCompleteDrawable = completeDrawable; } + public void setProgressDrawable(GradientDrawable progressDrawable) { + mProgressDrawable = progressDrawable; + } + public void setNormalText(CharSequence normalText) { super.setNormalText(normalText); if (mProgress == mMinProgress) { diff --git a/library/src/main/java/com/dd/processbutton/iml/ActionProcessButton.java b/library/src/main/java/com/dd/processbutton/iml/ActionProcessButton.java index 730eee0..6692ddc 100644 --- a/library/src/main/java/com/dd/processbutton/iml/ActionProcessButton.java +++ b/library/src/main/java/com/dd/processbutton/iml/ActionProcessButton.java @@ -94,8 +94,8 @@ public void setColorScheme(int color1, int color2, int color3, int color4) { @Override public void drawProgress(Canvas canvas) { - if(getBackground() != getNormalDrawable()) { - setBackgroundDrawable(getNormalDrawable()); + if(getBackground() != getProgressDrawable()) { + setBackgroundDrawable(getProgressDrawable()); } switch (mMode) { @@ -122,8 +122,8 @@ private void drawLineProgress(Canvas canvas) { double indicatorHeightPercent = 0.05; // 5% int bottom = (int) (getMeasuredHeight() - getMeasuredHeight() * indicatorHeightPercent); - getProgressDrawable().setBounds(0, bottom, (int) indicatorWidth, getMeasuredHeight()); - getProgressDrawable().draw(canvas); + getProgressLineDrawable().setBounds(0, bottom, (int) indicatorWidth, getMeasuredHeight()); + getProgressLineDrawable().draw(canvas); } private void drawEndlessProgress(Canvas canvas) { diff --git a/library/src/main/java/com/dd/processbutton/iml/GenerateProcessButton.java b/library/src/main/java/com/dd/processbutton/iml/GenerateProcessButton.java index 09fcbbf..7e4f9bf 100644 --- a/library/src/main/java/com/dd/processbutton/iml/GenerateProcessButton.java +++ b/library/src/main/java/com/dd/processbutton/iml/GenerateProcessButton.java @@ -49,8 +49,8 @@ public void drawProgress(Canvas canvas) { float scale = (float) getProgress() / (float) getMaxProgress(); float indicatorHeight = (float) getMeasuredHeight() * scale; - getProgressDrawable().setBounds(0, 0, getMeasuredWidth(), (int) indicatorHeight); - getProgressDrawable().draw(canvas); + getProgressLineDrawable().setBounds(0, 0, getMeasuredWidth(), (int) indicatorHeight); + getProgressLineDrawable().draw(canvas); } } diff --git a/library/src/main/java/com/dd/processbutton/iml/SubmitProcessButton.java b/library/src/main/java/com/dd/processbutton/iml/SubmitProcessButton.java index cad5ca5..b3f8d52 100644 --- a/library/src/main/java/com/dd/processbutton/iml/SubmitProcessButton.java +++ b/library/src/main/java/com/dd/processbutton/iml/SubmitProcessButton.java @@ -49,8 +49,8 @@ public void drawProgress(Canvas canvas) { float scale = (float) getProgress() / (float) getMaxProgress(); float indicatorWidth = (float) getMeasuredWidth() * scale; - getProgressDrawable().setBounds(0, 0, (int) indicatorWidth, getMeasuredHeight()); - getProgressDrawable().draw(canvas); + getProgressLineDrawable().setBounds(0, 0, (int) indicatorWidth, getMeasuredHeight()); + getProgressLineDrawable().draw(canvas); } } diff --git a/library/src/main/res/drawable/rect_progress.xml b/library/src/main/res/drawable/rect_progress.xml index bf984f3..8ccd30d 100644 --- a/library/src/main/res/drawable/rect_progress.xml +++ b/library/src/main/res/drawable/rect_progress.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/library/src/main/res/drawable/rect_progress_line.xml b/library/src/main/res/drawable/rect_progress_line.xml new file mode 100644 index 0000000..b6da923 --- /dev/null +++ b/library/src/main/res/drawable/rect_progress_line.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/library/src/main/res/values/colors.xml b/library/src/main/res/values/colors.xml index 49fba6a..abc2981 100644 --- a/library/src/main/res/values/colors.xml +++ b/library/src/main/res/values/colors.xml @@ -3,8 +3,9 @@ #ff0099cc #ff33b5e5 #ff99cc00 - #ffaa66cc + #ffaa66cc #ffff4444 + #ffb74d #ff00ddff #ff99cc00 diff --git a/library/src/main/res/values/styles.xml b/library/src/main/res/values/styles.xml index 4bddb0a..5796c82 100644 --- a/library/src/main/res/values/styles.xml +++ b/library/src/main/res/values/styles.xml @@ -3,6 +3,7 @@ + diff --git a/sample/src/main/res/layout/ac_sign_in.xml b/sample/src/main/res/layout/ac_sign_in.xml index f0aa7d7..9a1ac0c 100644 --- a/sample/src/main/res/layout/ac_sign_in.xml +++ b/sample/src/main/res/layout/ac_sign_in.xml @@ -38,7 +38,8 @@ custom:pb_colorComplete="@color/green_complete" custom:pb_colorNormal="@color/blue_normal" custom:pb_colorPressed="@color/blue_pressed" - custom:pb_colorProgress="@color/purple_progress" + custom:pb_colorProgressLine="@color/purple_progress_line" + custom:pb_colorProgress="@color/orange_progress" custom:pb_textComplete="@string/Success" custom:pb_textProgress="@string/Loading" />