Skip to content
This repository was archived by the owner on Apr 7, 2026. It is now read-only.

Commit 9bac32c

Browse files
committed
Use System.nanoTime instead of java.time for frame timing
Lowers minSdk to 21
1 parent 0bc3697 commit 9bac32c

3 files changed

Lines changed: 12 additions & 14 deletions

File tree

library/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ android {
66
buildToolsVersion "27.0.3"
77

88
defaultConfig {
9-
minSdkVersion 26
9+
minSdkVersion 21
1010
targetSdkVersion 27
1111
versionCode 1
1212
versionName "1.0"

library/src/main/java/com/q42/android/scrollingimageview/ScrollingImageView.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import android.util.TypedValue;
1313
import android.view.View;
1414

15-
import java.time.Instant;
16-
import java.time.temporal.ChronoUnit;
1715
import java.util.ArrayList;
1816
import java.util.Collections;
1917
import java.util.List;
@@ -58,10 +56,10 @@ public Bitmap loadDrawable(Context context, int resourceId) {
5856
private final Rect clipBounds = new Rect();
5957
private float offset = 0;
6058

59+
private static final double NANOS_PER_SECOND = 1e9;
6160
/** Moment when the last call to onDraw() started */
62-
private static final double MICROS_PER_SECOND = 1e6;
63-
private Instant lastFrameInstant = null;
64-
private long frameTimeMicros = -1;
61+
private long lastFrameInstant = -1;
62+
private long frameTimeNanos = -1;
6563

6664
private boolean isStarted;
6765

@@ -148,11 +146,11 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
148146
@Override
149147
public void onDraw(Canvas canvas) {
150148
if(!isInEditMode()) {
151-
if (lastFrameInstant == null){
152-
lastFrameInstant = Instant.now();
149+
if (lastFrameInstant == -1){
150+
lastFrameInstant = System.nanoTime();
153151
}
154-
frameTimeMicros = ChronoUnit.MICROS.between(lastFrameInstant, Instant.now());
155-
lastFrameInstant = Instant.now();
152+
frameTimeNanos = System.nanoTime() - lastFrameInstant;
153+
lastFrameInstant = System.nanoTime();
156154

157155
super.onDraw(canvas);
158156
if (canvas == null || bitmaps.isEmpty()) {
@@ -176,7 +174,7 @@ public void onDraw(Canvas canvas) {
176174

177175
if (isStarted && speed != 0) {
178176

179-
offset -= (abs(speed) / MICROS_PER_SECOND) * frameTimeMicros;
177+
offset -= (abs(speed) / NANOS_PER_SECOND) * frameTimeNanos;
180178
postInvalidateOnAnimation();
181179
}
182180
}
@@ -200,7 +198,7 @@ private float getBitmapLeft(float layerWidth, float left) {
200198
public void start() {
201199
if (!isStarted) {
202200
isStarted = true;
203-
lastFrameInstant = null;
201+
lastFrameInstant = -1;
204202
postInvalidateOnAnimation();
205203
}
206204
}
@@ -212,7 +210,7 @@ public void start() {
212210
public void stop() {
213211
if (isStarted) {
214212
isStarted = false;
215-
lastFrameInstant = null;
213+
lastFrameInstant = -1;
216214
invalidate();
217215
}
218216
}

sampleapp/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ android {
66

77
defaultConfig {
88
applicationId "scrollingimageview.android.q42.com.sampleapp"
9-
minSdkVersion 26
9+
minSdkVersion 21
1010
targetSdkVersion 27
1111
versionCode 1
1212
versionName "1.0"

0 commit comments

Comments
 (0)