simple-analog-clock

A simple clock view. The clock drawables can be changed with your own custom assets.

Prerequisites

Your project must be using AndroidX artifacts instead of Support Libraries.
Otherwise your project build will fail due to Manifest merger failed error.

Installation

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}
dependencies {
  implementation 'com.github.leondzn:simple-analog-clock:${version}'
}

Usage

XML

<com.leondzn.simpleanalogclock.SimpleAnalogClock
    android:id="@+id/clock"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    app:hourTint="@color/colorPrimary"                                        
    app:secondTint="@color/colorAccent" />

The following XML attributes are supported:

app:faceTint, app:hourTint, app:minuteTint, app:secondTint

to colorize the clock's face and hands.

You can manually set the individual hands' rotation value given a specific angle using

app:hourRotation, app:minuteRotation, app:secondRotation

You can also provide custom drawables for the clock using

app:faceDrawable, app:hourDrawable, app:minuteDrawable, app:secondDrawable

More info on providing custom drawables are detailed below.

Java

SimpleAnalogClock clock = findViewById(...);

clock.setSecondTint(...)
  .setTime(hour, minute, second);

You can rotate the clock hands individually using the following methods:

rotateHourHand(angle), rotateMinuteHand(angle), rotateSecondHand(angle)

Using the methods above requires you to calculate the corresponding angles for each time value.

To use exact time values, use the following methods:

setTime(int hour, int minute, int second) or setTime(int hour, int munute, int second, int millis)

Using the millisecond parameter allows for the second hand to turn more smoothly as opposed to traditional analog
clock "ticking" behavior.

Similar to the XML attributes, you can also provide custom drawables to use with the analog clock:

setFaceDrawable(Drawable), setHourDrawable(Drawable), setMinuteDrawable(Drawable), setSecondDrawable(Drawable)

Using Custom Drawables

Simple default clock face and hands are provided but you are free to use custom drawables
provided that they follow these guidelines:

  • All 4 layers (face, hour hand, minute hand, second hand) should all be the same image size
  • The images should be square
  • Clock hands should be pointing at the 12 o' clock position
  • SVG or PNG can be used

Example:

face

Face

hour

Short hand

minute

Long hand

second

Second hand

GitHub