package com.hkm.ui.processbutton.iml; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.support.v4.view.ViewCompat; import android.util.AttributeSet; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import com.hkm.ui.processbutton.ProcessButton; import com.hkm.ui.processbutton.R; import com.hkm.ui.processbutton.Util.ProgressBar; public class ActionProcessButton extends ProcessButton { private ProgressBar mProgressBar; private Mode mMode; private int mColor1; private int mColor2; private int mColor3; private int mColor4; public enum Mode { PROGRESS, ENDLESS; } public ActionProcessButton(Context context) { super(context); init(context); } public ActionProcessButton(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public ActionProcessButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } private void init(Context context) { Resources res = context.getResources(); mMode = Mode.ENDLESS; mColor1 = res.getColor(R.color.holo_blue_bright); mColor2 = res.getColor(R.color.holo_green_light); mColor3 = res.getColor(R.color.holo_orange_light); mColor4 = res.getColor(R.color.holo_red_light); } public void setMode(Mode mode) { mMode = mode; } @Override public void drawProgress(Canvas canvas) { if (getBackground() != getNormalDrawable()) { setBackgroundDrawable(getNormalDrawable()); } switch (mMode) { case ENDLESS: drawEndlessProgress(canvas); break; case PROGRESS: drawLineProgress(canvas); break; } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (mProgressBar != null) { setupProgressBarBounds(); } } private void drawLineProgress(Canvas canvas) { float scale = (float) getProgress() / (float) getMaxProgress(); float indicatorWidth = (float) getMeasuredWidth() * scale; double indicatorHeightPercent = 0.05; // 5% int bottom = (int) (getMeasuredHeight() - getMeasuredHeight() * indicatorHeightPercent); getProgressDrawable().setBounds(0, bottom, (int) indicatorWidth, getMeasuredHeight()); getProgressDrawable().draw(canvas); } private void drawEndlessProgress(Canvas canvas) { if (mProgressBar == null) { mProgressBar = new ProgressBar(this); setupProgressBarBounds(); mProgressBar.setColorScheme(mColor1, mColor2, mColor3, mColor4); mProgressBar.start(); } if (getProgress() > 0) { mProgressBar.draw(canvas); } } private void setupProgressBarBounds() { double indicatorHeight = getDimension(R.dimen.layer_padding); int bottom = (int) (getMeasuredHeight() - indicatorHeight); mProgressBar.setBounds(0, bottom, getMeasuredWidth(), getMeasuredHeight()); } }