content: package org.adw.samples.discreteseekbar;
  
  import android.app.Activity;
  import android.content.Context;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;
  import android.widget.EditText;
  import android.widget.RadioButton;
  import android.widget.RadioGroup;
  import android.widget.Toast;
  
  import org.adw.library.widgets.discreteseekbar.DiscreteSeekBar;
  
  import butterknife.ButterKnife;
  import butterknife.InjectView;
  
  public class MainActivity extends Activity implements View.OnClickListener{
      private final static int TRACK = 0;
      private final static int PROGRESS = 1;
      private final static int FLOATER_START = 2;
      private final static int FLOATER_END = 3;
      @InjectView(R.id.sample_seekbar)
      DiscreteSeekBar sbTarget;
      @InjectView(R.id.rg_position)
      RadioGroup rgPosition;//modify the color of different parts
      @InjectView(R.id.rbt_track)
      RadioButton rbtTrack;
      @InjectView(R.id.rbt_progress_bar)
      RadioButton rbtProgress;
      @InjectView(R.id.rbt_floater_end)
      RadioButton rbtFloaterEnd;
      @InjectView(R.id.rbt_floater_start)
      RadioButton rbtFloaterStart;
      @InjectView(R.id.red_discrete)
      DiscreteSeekBar sbRed;
      @InjectView(R.id.green_discrete)
      DiscreteSeekBar sbGreen;
      @InjectView(R.id.blue_discrete)
      DiscreteSeekBar sbBlue;
      @InjectView(R.id.btn_set_color)
      Button btnSetColor;
      @InjectView(R.id.min_discrete)
      DiscreteSeekBar sbMin;
      @InjectView(R.id.max_discrete)
      DiscreteSeekBar sbMax;
      @InjectView(R.id.btn_set_value)
      Button btnSetValue;
      @InjectView(R.id.edt_regex)
      EditText edtRegex;
      @InjectView(R.id.btn_set_regex)
      Button btnSetRegex;
  
      int colorPos;
      int iFloaterStartColor = -1;
      int iFloaterEndColor = -1;
      int iColor = 0xffffffff;
  
      Context ctx;
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          ButterKnife.inject(this);
  
          ctx = this;
  
          rgPosition.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
              @Override
              public void onCheckedChanged(RadioGroup group, int checkedId) {
                  if(checkedId == rbtTrack.getId()){
                      colorPos = TRACK;
                  }else if(checkedId == rbtProgress.getId()){
                      colorPos = PROGRESS;
                  }else if(checkedId == rbtFloaterStart.getId()){
                      colorPos = FLOATER_START;
                  }else if(checkedId == rbtFloaterEnd.getId()){
                      colorPos = FLOATER_END;
                  }
              }
          });
          rbtProgress.setChecked(true);
  
          sbRed.setOnProgressChangeListener(colorListener);
          sbGreen.setOnProgressChangeListener(colorListener);
          sbBlue.setOnProgressChangeListener(colorListener);
  
          btnSetColor.setOnClickListener(this);
          btnSetRegex.setOnClickListener(this);
          btnSetValue.setOnClickListener(this);
  
  
          /**
           * 初始化
           */
          sbTarget.setThumbColor(0xffFF8877, 0xff00ff00);
          sbTarget.setScrubberColor(0xffff0000);
          sbTarget.setNumericTransformer(new DiscreteSeekBar.NumericTransformer() {
              @Override
              public int transform(int value) {
                  return value * 100;
              }
          });
      }
  
      /**
       * Called when a view has been clicked.
       *
       * @param v The view that was clicked.
       */
      @Override
      public void onClick(View v) {
          switch (v.getId()){
              case R.id.btn_set_color:
                  switch (colorPos){
                      case TRACK:
                          /**
                           * 只能在xml中设置
                           */
                          Toast.makeText(ctx, "no API for track color", Toast.LENGTH_SHORT).show();
                          break;
                      case PROGRESS:
                          sbTarget.setScrubberColor(iColor);
                          break;
                      case FLOATER_START:
                          iFloaterStartColor = iColor;
                          if(iFloaterEndColor == -1) {
                              //这个接口有耦合，不爽
                              sbTarget.setThumbColor(iColor, iColor);
                          }else{
                              sbTarget.setThumbColor(iColor, iFloaterEndColor);
                          }
                          break;
                      case FLOATER_END:
                          iFloaterEndColor = iColor;
                          if(iFloaterStartColor == -1) {
                              sbTarget.setThumbColor(iColor, iColor);
                          }else{
                              sbTarget.setThumbColor(iFloaterStartColor, iColor);
                          }
                          break;
                  }
                  break;
              case R.id.btn_set_value:
                  /**
                   * sbMin 会看到数字显示不全的BUG，因为0>-1000，但是floater的宽度是由Max设置的，所以....
                   */
                  sbTarget.setMin(sbMin.getProgress());
                  sbTarget.setMax(sbMax.getProgress());
                  break;
              case R.id.btn_set_regex:
                  /**
                   * 这个接口只能显示数字，如果我想用seekbar显示时间就没有办法了。
                   */
                  sbTarget.setNumericTransformer(new DiscreteSeekBar.NumericTransformer() {
                      @Override
                      public int transform(int value) {
                          try {
                              float multiple = Float.parseFloat(edtRegex.getText().toString());
                              return (int)(value * multiple);
                          }catch (Exception e) {
                              return value;
                          }
                      }
                  });
          }
      }
  
      DiscreteSeekBar.OnProgressChangeListener colorListener = new DiscreteSeekBar.OnProgressChangeListener() {
          @Override
          public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {
              if(seekBar.getId() == sbRed.getId()){
                  iColor = 0xff000000 + (value<<16) + (sbGreen.getProgress()<<8) + (sbBlue.getProgress());
              }else if(seekBar.getId() == sbGreen.getId()){
                  iColor = 0xff000000 + (sbRed.getProgress()<<16) + (value<<8) + (sbBlue.getProgress());
              }else{
                  iColor = 0xff000000 + (sbRed.getProgress()<<16) + (sbGreen.getProgress()<<8) + (value);
              }
  
              btnSetColor.setTextColor(iColor);
          }
  
          @Override
          public void onStartTrackingTouch(DiscreteSeekBar seekBar) {
  
          }
  
          @Override
          public void onStopTrackingTouch(DiscreteSeekBar seekBar) {
  
          }
      };
  }
  