title: How to mark horizontal ProgressBar with different color at some index just like Youtube video yellow color ad marker in Android
body: <p>In my current app there is requirement to create custom video player and the special requirement is, to display or mark video progress-bar with different color at some given time-index just like Youtube marks its video with yellow color to indicate ads on its video progress bar.</p>
  
  <p>For more clarity please check below screen-shot:</p>
  
  <p><a href="https://i.stack.imgur.com/hTKNF.png" rel="noreferrer"><img src="https://i.stack.imgur.com/hTKNF.png" alt="enter image description here"></a></p>
  
  <p>At this moment I'm done with Video Player functionality using VideoView and for now, I'm using Horizontal ProgressBar to show video progress. I did lot of research, but unfortunately no result so far. There is no compulsion to use only Horizontal ProgressBar, we can use SeekBar or inbuilt MediaController too, but the thing is we should be able to mark it with different color at some given position. Below is my code I have written so far:</p>
  
  <p><strong>activity_main.xml</strong></p>
  
  <pre><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="#000000"
      android:paddingLeft="5dp"
      android:paddingTop="5dp"
      android:paddingRight="5dp"
      android:paddingBottom="5dp"
      tools:context=".MainActivity"&gt;
  
      &lt;VideoView
          android:id="@+id/myVideo"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_centerInParent="true" /&gt;
  
      &lt;RelativeLayout
          android:id="@+id/rlVidProgress"
          android:layout_width="match_parent"
          android:layout_alignParentBottom="true"
          android:layout_height="wrap_content"&gt;
  
          &lt;TextView
              android:id="@+id/tvCurrentTime"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerVertical="true"
              android:layout_marginLeft="5dp"
              android:layout_marginRight="20dp"
              android:text="00:00"
              android:textColor="@android:color/white"
              android:textSize="13dp"
              android:textStyle="bold" /&gt;
  
          &lt;ProgressBar
              android:id="@+id/videoProgress"
              style="@android:style/Widget.ProgressBar.Horizontal"
              android:layout_centerVertical="true"
              android:layout_toLeftOf="@+id/tvTotalTime"
              android:layout_width="fill_parent"
              android:layout_toRightOf="@+id/tvCurrentTime"
              android:layout_height="10dp"
              android:layout_marginBottom="10dp" /&gt;
  
          &lt;TextView
              android:id="@+id/tvTotalTime"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerVertical="true"
              android:layout_alignParentRight="true"
              android:layout_marginLeft="20dp"
              android:layout_marginRight="5dp"
              android:text="00:00"
              android:textColor="@android:color/white"
              android:textSize="13dp"
              android:textStyle="bold" /&gt;
  
      &lt;/RelativeLayout&gt;
  
      &lt;TextView
          android:id="@+id/tvAutoSave"
          android:layout_width="wrap_content"
          android:textColor="@android:color/white"
          android:layout_alignParentRight="true"
          android:layout_marginBottom="10dp"
          android:text="@string/click_to_auto_save_offer"
          android:background="@drawable/white_border_bg"
          android:textSize="13dp"
          android:layout_above="@+id/rlVidProgress"
          android:visibility="gone"
          android:paddingBottom="3dp"
          android:paddingTop="3dp"
          android:paddingLeft="10dp"
          android:paddingRight="10dp"
          android:textStyle="bold"
          android:layout_height="wrap_content" /&gt;
  
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p><strong>MainActivity.java</strong></p>
  
  <pre><code>public class MainActivity extends AppCompatActivity implements View.OnClickListener
  {
      ProgressBar videoProgress;
      TextView tvCurrentTime;
      Handler handler;
      VideoView vidView;
      String strTotalDuration;
      TextView tvAutoSave;
      Animation animFadeIn, animFadeOut;
  
      @Override
      protected void onCreate(Bundle savedInstanceState)
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          animFadeIn = new AlphaAnimation(0, 1);
          animFadeIn.setInterpolator(new DecelerateInterpolator()); //add this
          animFadeIn.setDuration(1000);
  
          animFadeOut = new AlphaAnimation(1, 0);
          animFadeOut.setInterpolator(new AccelerateInterpolator()); //and this
          //animFadeOut.setStartOffset(500);
          animFadeOut.setDuration(500);
  
  
          tvCurrentTime = (TextView) findViewById(R.id.tvCurrentTime);
          final TextView tvTotalTime = (TextView) findViewById(R.id.tvTotalTime);
          tvAutoSave = (TextView) findViewById(R.id.tvAutoSave);
          tvAutoSave.setOnClickListener(this);
  
          vidView = (VideoView)findViewById(R.id.myVideo);
  
          videoProgress = (ProgressBar) findViewById(R.id.videoProgress);
          videoProgress.setProgress(0);
          videoProgress.setMax(100);
  
          final String videoSource = "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4";
          vidView.setKeepScreenOn(true);
          vidView.setVideoURI(Uri.parse(videoSource));
          vidView.setMediaController(null);
  
          handler = new Handler();
          // Define the code block to be executed
          final Runnable runnableCode = new Runnable() {
              @Override
              public void run()
              {
                  updateCurrentTime();
                  // Repeat this the same runnable code block again another 1 seconds
                  // 'this' is referencing the Runnable object
                  handler.postDelayed(this, 1000);
              }
          };
  
          vidView.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
          {
              @Override
              public void onCompletion(MediaPlayer mp)
              {
                  if(tvAutoSave.getVisibility() == View.VISIBLE)
                  {
                      tvAutoSave.setVisibility(View.GONE);
                      tvAutoSave.startAnimation(animFadeOut);
                  }
              }
          });
  
          vidView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
                                        {
                                            @Override
                                            public void onPrepared(MediaPlayer mp)
                                            {
                                                vidView.start();
                                                strTotalDuration = msToTimeConverter(vidView.getDuration());
                                                tvTotalTime.setText(""+strTotalDuration);
                                                // Start the initial runnable task by posting through the handler
                                                handler.post(runnableCode);
                                                //startHandler();
                                            }
                                        }
  
  
          );
      }
  
  
      private void updateCurrentTime()
      {
          if (videoProgress.getProgress() &gt;= 100)
          {
              handler.removeMessages(0);
          }
          String currentPosition = msToTimeConverter(vidView.getCurrentPosition());
  
          String[] strArr = currentPosition.split(":");
  
          if(strArr.length==2 &amp;&amp; (strArr[1].equals("06") || strArr[1].equals("6")))
          {
              Toast.makeText(MainActivity.this, "Trigger success at 6 sec position.......", Toast.LENGTH_SHORT).show();
              tvAutoSave.setVisibility(View.VISIBLE);
              tvAutoSave.startAnimation(animFadeIn);
          }
  
          int progress = vidView.getCurrentPosition() * 100 / vidView.getDuration();
          videoProgress.setProgress(progress);
  
          tvCurrentTime.setText(""+currentPosition);
      }
  
      String msToTimeConverter(int millis)
      {
          return String.format("%02d:%02d", TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                  TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
      }
  
      @Override
      public void onClick(View v)
      {
          switch (v.getId())
          {
              case R.id.tvAutoSave:
                  tvAutoSave.setVisibility(View.GONE);
                  tvAutoSave.startAnimation(animFadeOut);
                  Toast.makeText(MainActivity.this, "Offer(s) saved in wallet successfully", Toast.LENGTH_SHORT).show();
                  break;
          }
      }
  }
  </code></pre>