blob: 6707ee2333611ff74c2a8123061dbf24ff6bccb2 [file] [log] [blame]
/*
* Copyright 2021 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
package org.skia.androidkit;
import org.skia.androidkit.Canvas;
public class SkottieAnimation {
private long mNativeInstance;
/**
* Create an animation from the provided JSON string.
*/
public SkottieAnimation(String animation_json) {
mNativeInstance = nCreate(animation_json);
}
/**
* Returns the animation duration in seconds.
*/
public double getDuration() {
return nGetDuration(mNativeInstance);
}
/**
* Returns the animation frame count. This is normally an integral value,
* but both the JSON encoding and Skottie's frame-based APIs support fractional frames.
*/
public double getFrameCount() {
return nGetFrameCount(mNativeInstance);
}
/**
* Returns the intrinsic animation width.
*/
public float getWidth() {
return nGetWidth(mNativeInstance);
}
/**
* Returns the intrinsic animation height.
*/
public float getHeight() {
return nGetHeight(mNativeInstance);
}
/**
* Update the animation state to match |t|, specifed in seconds.
* The input is clamped to [0..duration).
*/
public void seekTime(double t) {
nSeekTime(mNativeInstance, t);
}
/**
* Update the animation state to match |f|, specified as a frame index
* in the [0..frameCount) domain.
*
* Fractional values are allowed and meaningful - e.g.
*
* 0.0 -> first frame
* 1.0 -> second frame
* 0.5 -> halfway between first and second frame
*/
public void seekFrame(double f) {
nSeekFrame(mNativeInstance, f);
}
/**
* Draw the current frame to the Canvas.
*/
public void render(Canvas canvas) {
nRender(mNativeInstance, canvas.getNativeInstance());
}
/**
* Releases any resources associated with this Animation.
*/
public void release() {
nRelease(mNativeInstance);
mNativeInstance = 0;
}
@Override
protected void finalize() throws Throwable {
release();
}
private static native long nCreate(String json);
private static native void nRelease(long nativeInstance);
private static native double nGetDuration(long nativeInstance);
private static native double nGetFrameCount(long nativeInstance);
private static native float nGetWidth(long nativeInstance);
private static native float nGetHeight(long nativeInstance);
private static native void nSeekTime(long nativeInstance, double t);
private static native void nSeekFrame(long nativeInstance, double frame);
private static native void nRender(long nativeInstance, long nativeCanvas);
}