LinearTimer
                                
                                 LinearTimer copied to clipboard
                                
                                    LinearTimer copied to clipboard
                            
                            
                            
                        A custom view for circular progress animation on Android.
 
 
Linear Timer
Linear Timer is a custom view for Android that enables circular progress animation with respect to given duration.
Linear Timer supports following features -
- Progress animation in clock-wise or counter clock-wise direction.
- Get time elapsed since timer started or time left for the counter to complete.
- Provide Start and finish points for the animation.
- Pre-fill the progress up-till certain point.
- Resume the animation on the basis of duration elapsed from total duration.
...and much more.
Download the demo app -
If you're using this library, please let me know; I'll feature your app in the wiki.
Screenshots
 
Versioning
Linear Timer follows the Semantic Versioning System.
Summery - MAJOR.MINOR.PATCH
Setup
Setup is pretty straight forward.
In your project's build.gradle add the following -
allprojects {
  repositories {
      jcenter()
      maven { url "https://jitpack.io" }
  }
}
And, in your app's build.gradle add this under dependencies block -
compile 'com.github.krtkush:LinearTimer:<version_available_on_jitpack>'
example - compile 'com.github.krtkush:LinearTimer:v2.1.1'
Usage
First, you need to add LinearTimerView into your XML layout -
xmlns:timer="http://schemas.android.com/apk/res-auto"
<io.github.krtkush.lineartimer.LinearTimerView
    android:id="@+id/linearTimer"
    android:layout_centerHorizontal="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    timer:radius="20dp"
    timer:strokeWidth="3dp"/>
Note that "wrap_content" for height and width is recommended. Using other values might not lead correct rendering of the view.
After adding the view, here is how it is initialized and used -
LinearTimerView linearTimerView = (LinearTimerView)
                                    findViewById(R.id.linearTimer);
LinearTimer linearTimer = new LinearTimer.Builder()
            .linearTimerView(linearTimerView)
            .duration(10 * 1000)
            .build();
// Start the timer.
findViewById(R.id.startTimer).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
      linearTimer.startTimer();
    }
});
// Restart the timer.
findViewById(R.id.restartTimer).setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
        linearTimer.restartTimer();
      }
});
// Pause the timer
findViewById(R.id.pauseTimer).setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
         try {
            linearTimer.pauseTimer();
         } catch (IllegalStateException e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
         }
      }
 });
// Resume the timer
findViewById(R.id.resumeTimer).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
          try {
            linearTimer.resumeTimer();
          } catch (IllegalStateException e) {
              e.printStackTrace();
              Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
          }
      }
 });
// Reset the timer
findViewById(R.id.resetTimer).setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       try {
           linearTimer.resetTimer();
       } catch (IllegalStateException e) {
           e.printStackTrace();
           Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
       }
   }
});
List of methods available to control the timer -
| Method | Description | Exception | |
|---|---|---|---|
| 1. | startTimer() | Start the timer. | IllegalStateException | 
| 2. | pauseTimer() | Pause the timer. | IllegalStateException | 
| 3. | resumeTimer() | Resume the timer from its pause position. | IllegalStateException | 
| 4. | resetTimer() | Reset the timer to the starting angle; the timer will not start after reset. | IllegalStateException | 
| 5. | restartTimer() | Restart the timer from the starting angle; the timer will start again. | None | 
| 5. | getState() | Get current state of the timer. | None | 
For detailed documentation and on how to customise and use LinearTimer please refer to the wiki.
Refer here for Java Docs. General URL for Java Docs is https://jitpack.io/com/github/krtkush/lineartimer/<insert_version_of_choice>/javadoc/
Contribution
Any kind of contribution will be appreciated; feel free to create a pull request or file issues on the issue tracker.
List of current contributors can be found here.
