package fr.castorflex.android.smoothprogressbar.sample; import android.app.Activity; import android.content.res.Resources; import android.os.Bundle; import android.util.TypedValue; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.ProgressBar; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.TextView; import fr.castorflex.android.smoothprogressbar.SmoothProgressDrawable; /** * Created by castorflex on 12/1/13. */ public class MakeCustomActivity extends Activity { private ProgressBar mProgressBar; private CheckBox mCheckBoxMirror; private CheckBox mCheckBoxReversed; private Spinner mSpinnerInterpolators; private SeekBar mSeekBarSectionsCount; private SeekBar mSeekBarStrokeWidth; private SeekBar mSeekBarSeparatorLength; private SeekBar mSeekBarSpeed; private Button mButton; private TextView mTextViewSpeed; private TextView mTextViewStrokeWidth; private TextView mTextViewSeparatorLength; private TextView mTextViewSectionsCount; private float mSpeed; private int mStrokeWidth; private int mSeparatorLength; private int mSectionsCount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom); mProgressBar = (ProgressBar) findViewById(R.id.progressbar); mCheckBoxMirror = (CheckBox) findViewById(R.id.checkbox_mirror); mCheckBoxReversed = (CheckBox) findViewById(R.id.checkbox_reversed); mSpinnerInterpolators = (Spinner) findViewById(R.id.spinner_interpolator); mSeekBarSectionsCount = (SeekBar) findViewById(R.id.seekbar_sections_count); mSeekBarStrokeWidth = (SeekBar) findViewById(R.id.seekbar_stroke_width); mSeekBarSeparatorLength = (SeekBar) findViewById(R.id.seekbar_separator_length); mSeekBarSpeed = (SeekBar) findViewById(R.id.seekbar_speed); mButton = (Button) findViewById(R.id.button); mTextViewSpeed = (TextView) findViewById(R.id.textview_speed); mTextViewSectionsCount = (TextView) findViewById(R.id.textview_sections_count); mTextViewSeparatorLength = (TextView) findViewById(R.id.textview_separator_length); mTextViewStrokeWidth = (TextView) findViewById(R.id.textview_stroke_width); mSeekBarSpeed.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mSpeed = ((float) progress + 1) / 10; mTextViewSpeed.setText("Speed: " + mSpeed); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); mSeekBarSectionsCount.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mSectionsCount = progress + 1; mTextViewSectionsCount.setText("Sections count: " + mSectionsCount); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); mSeekBarSeparatorLength.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mSeparatorLength = progress; mTextViewSeparatorLength.setText(String.format("Separator length: %ddp", mSeparatorLength)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); mSeekBarStrokeWidth.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mStrokeWidth = progress; mTextViewStrokeWidth.setText(String.format("Stroke width: %ddp", mStrokeWidth)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); mSeekBarSeparatorLength.setProgress(4); mSeekBarSectionsCount.setProgress(4); mSeekBarStrokeWidth.setProgress(4); mSeekBarSpeed.setProgress(9); mSpinnerInterpolators.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.interpolators))); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setValues(); } }); } private void setValues() { SmoothProgressDrawable.Builder builder = new SmoothProgressDrawable.Builder(this); builder.speed(mSpeed) .sectionsCount(mSectionsCount) .separatorLength(dpToPx(mSeparatorLength)) .width(dpToPx(mStrokeWidth)) .mirrorMode(mCheckBoxMirror.isChecked()) .reversed(mCheckBoxReversed.isChecked()); Interpolator interpolator; switch (mSpinnerInterpolators.getSelectedItemPosition()) { case 1: interpolator = new LinearInterpolator(); break; case 2: interpolator = new AccelerateDecelerateInterpolator(); break; case 3: interpolator = new DecelerateInterpolator(); break; case 0: default: interpolator = new AccelerateInterpolator(); break; } builder.interpolator(interpolator); builder.colors(getResources().getIntArray(R.array.colors)); SmoothProgressDrawable d = builder.build(); d.setBounds(mProgressBar.getIndeterminateDrawable().getBounds()); mProgressBar.setIndeterminateDrawable(d); d.start(); } public int dpToPx(int dp) { Resources r = getResources(); int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()); return px; } }