package com.marshalchen.common.uimodule.square_progressbar; import android.content.Context; import android.graphics.Color; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.util.AttributeSet; import android.view.LayoutInflater; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.RelativeLayout; import com.marshalchen.common.uimodule.R; import com.marshalchen.common.uimodule.square_progressbar.utils.CalculationUtil; import com.marshalchen.common.uimodule.square_progressbar.utils.PercentStyle; /** * The basic {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar}. THis class includes all the methods you * need to modify your {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar}. * * @author ysigner * @since 1.0.0 */ public class SquareProgressBar extends RelativeLayout { private ImageView imageView; private final SquareProgressView bar; private boolean opacity = false; private boolean greyscale; private boolean isFadingOnProgress = false; /** * New SquareProgressBar. * * @param context * the {@link android.content.Context} * @param attrs * an {@link android.util.AttributeSet} * @param defStyle * a defined style. * @since 1.0.0 */ public SquareProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.square_progress_bar_view, this, true); bar = (SquareProgressView) findViewById(R.id.squareProgressBar1); bar.bringToFront(); } /** * New SquareProgressBar. * * @param context * the {@link android.content.Context} * @param attrs * an {@link android.util.AttributeSet} * @since 1.0.0 */ public SquareProgressBar(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.square_progress_bar_view, this, true); bar = (SquareProgressView) findViewById(R.id.squareProgressBar1); bar.bringToFront(); } /** * New SquareProgressBar. * * @param context * @since 1.0.0 */ public SquareProgressBar(Context context) { super(context); LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.square_progress_bar_view, this, true); bar = (SquareProgressView) findViewById(R.id.squareProgressBar1); bar.bringToFront(); } /** * Sets the image of the {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar}. Must be a valid * ressourceId. * * @param image * the image as a ressourceId * @since 1.0 */ public void setImage(int image) { imageView = (ImageView) findViewById(R.id.imageView1); imageView.setImageResource(image); } /** * Sets the image scale type according to {@link android.widget.ImageView.ScaleType}. * * @param scale * the image ScaleType * @since 1.3.0 * @author thiagokimo */ public void setImageScaleType(ScaleType scale) { imageView.setScaleType(scale); } /** * Sets the progress of the {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar}. If opacity is * selected then here it sets it. See {@link #setOpacity(boolean)} for more * information. * * @param progress * the progress * @since 1.0.0 */ public void setProgress(double progress) { bar.setProgress(progress); if (opacity) { if (isFadingOnProgress) { setOpacity(100 - (int) progress); } else { setOpacity((int) progress); } } else { setOpacity(100); } } /** * Sets the colour of the {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar} to a predefined android * holo color. <br/> * <b>Examples:</b> * <ul> * <li>holo_blue_bright</li> * <li>holo_blue_dark</li> * <li>holo_blue_light</li> * <li>holo_green_dark</li> * <li>holo_green_light</li> * <li>holo_orange_dark</li> * <li>holo_orange_light</li> * <li>holo_purple</li> * <li>holo_red_dark</li> * <li>holo_red_light</li> * </ul> * * @param androidHoloColor * @since 1.0.0 */ public void setHoloColor(int androidHoloColor) { bar.setColor(getContext().getResources().getColor(androidHoloColor)); } /** * Sets the colour of the {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar}. YOu can give it a * hex-color string like <i>#C9C9C9</i>. * * @param colorString * the colour of the {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar} * @since 1.1.0 */ public void setColor(String colorString) { bar.setColor(Color.parseColor(colorString)); } /** * This sets the colour of the {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar} with a RGB colour. * * @param r * red * @param g * green * @param b * blue * @since 1.1.0 */ public void setColorRGB(int r, int g, int b) { bar.setColor(Color.rgb(r, g, b)); } /** * This sets the colour of the {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar} with a RGB colour. * Works when used with * <code>android.graphics.Color.rgb(int, int, int)</code> * * @param * * @param * * @param * * @since 1.4.0 */ public void setColorRGB(int rgb) { bar.setColor(rgb); } /** * This sets the width of the {@link com.marshalchen.common.uimodule.square_progressbar.SquareProgressBar}. * * @param width * in Dp * @since 1.1.0 */ public void setWidth(int width) { int padding = CalculationUtil.convertDpToPx(width, getContext()); imageView.setPadding(padding, padding, padding, padding); bar.setWidthInDp(width); } /** * This sets the alpha of the image in the view. Actually I need to use the * deprecated method here as the new one is only available for the API-level * 16. And the min API level of this library is 14. * * Use this only as private method. * * @param progress * the progress */ private void setOpacity(int progress) { imageView.setAlpha((int) (2.55 * progress)); } /** * Switches the opacity state of the image. This forces the * SquareProgressBar to redraw with the current progress. As bigger the * progress is, then more of the image comes to view. If the progress is 0, * then you can't see the image at all. If the progress is 100, the image is * shown full. * * @param opacity * true if opacity should be enabled. * @since 1.2.0 */ public void setOpacity(boolean opacity) { this.opacity = opacity; setProgress(bar.getProgress()); } /** * Switches the opacity state of the image. This forces the * SquareProgressBar to redraw with the current progress. As bigger the * progress is, then more of the image comes to view. If the progress is 0, * then you can't see the image at all. If the progress is 100, the image is * shown full. * * You can also set the flag if the fading should get inverted so the image * disappears when the progress increases. * * @param opacity * true if opacity should be enabled. * @param isFadingOnProgress * default false. This changes the behavior the opacity works. If * the progress increases then the images fades. When the * progress reaches 100, then the image disappears. * @since 1.4.0 */ public void setOpacity(boolean opacity, boolean isFadingOnProgress) { this.opacity = opacity; this.isFadingOnProgress = isFadingOnProgress; setProgress(bar.getProgress()); } /** * You can set the image to b/w with this method. Works fine with the * opacity. * * @param greyscale * true if the grayscale should be activated. * @since 1.2.0 */ public void setImageGrayscale(boolean greyscale) { this.greyscale = greyscale; if (greyscale) { ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); imageView.setColorFilter(new ColorMatrixColorFilter(matrix)); } else { imageView.setColorFilter(null); } } /** * If opacity is enabled. * * @return true if opacity is enabled. */ public boolean isOpacity() { return opacity; } /** * If greyscale is enabled. * * @return true if greyscale is enabled. */ public boolean isGreyscale() { return greyscale; } /** * Draws an outline of the progressbar. Looks quite cool in some situations. * * @param drawOutline * true if it should or not. * @since 1.3.0 */ public void drawOutline(boolean drawOutline) { bar.setOutline(drawOutline); } /** * If outline is enabled or not. * * @return true if outline is enabled. */ public boolean isOutline() { return bar.isOutline(); } /** * Draws the startline. this is the line where the progressbar starts the * drawing around the image. * * @param drawStartline * true if it should or not. * @since 1.3.0 */ public void drawStartline(boolean drawStartline) { bar.setStartline(drawStartline); } /** * If the startline is enabled. * * @return true if startline is enabled or not. */ public boolean isStartline() { return bar.isStartline(); } /** * Defines if the percent text should be shown or not. To modify the text * checkout {@link #setPercentStyle(PercentStyle)}. * * @param showProgress * true if it should or not. * @since 1.3.0 */ public void showProgress(boolean showProgress) { bar.setShowProgress(showProgress); } /** * If the progress text inside of the image is enabled. * * @return true if it is or not. */ public boolean isShowProgress() { return bar.isShowProgress(); } /** * Sets a custom percent style to the text inside the image. Make sure you * set {@link #showProgress(boolean)} to true. Otherwise it doesn't shows. * The default settings are:</br> * <table> * <tr> * <th>Text align</td> * <td>CENTER</td> * </tr> * <tr> * <th>Text size</td> * <td>150 [dp]</td> * </tr> * <tr> * <th>Display percentsign</td> * <td>true</td> * </tr> * <tr> * <th>Custom text</td> * <td>%</td> * </tr> * </table> * * @param percentStyle */ public void setPercentStyle(PercentStyle percentStyle) { bar.setPercentStyle(percentStyle); } /** * Returns the {@link PercentStyle} of the percent text. Maybe returns the * default value, check {@link #setPercentStyle(PercentStyle)} fo that. * * @return the percent style of the moment. */ public PercentStyle getPercentStyle() { return bar.getPercentStyle(); } /** * If the progress hits 100% then the progressbar disappears if this flag is * set to <code>true</code>. The default is set to false. * * @param clearOnHundred * if it should disappear or not. * @since 1.4.0 */ public void setClearOnHundred(boolean clearOnHundred) { bar.setClearOnHundred(clearOnHundred); } /** * If the progressbar disappears when the progress reaches 100%. * * @since 1.4.0 */ public boolean isClearOnHundred() { return bar.isClearOnHundred(); } }