package com.kabby.LottieAnim; import android.app.Activity; import android.content.Context; import com.google.appinventor.components.annotations.*; import com.google.appinventor.components.common.ComponentCategory; import com.google.appinventor.components.runtime.*; import android.widget.FrameLayout; import android.animation.Animator; import android.animation.Animator.AnimatorListener; import com.airbnb.lottie.*; import android.view.*; import android.animation.Animator; import android.animation.ValueAnimator; import java.io.InputStream; import java.io.IOException; @DesignerComponent( version = 1, description = "", category = ComponentCategory.EXTENSION, nonVisible = true, iconName = "") @SimpleObject(external = true) //Libraries @UsesLibraries(libraries = "lottielibrary.jar") //Permissions @UsesPermissions(permissionNames = "") public class LottieAnim extends AndroidNonvisibleComponent { private Context context; private Activity activity; private LottieAnimationView animView; public LottieAnim(ComponentContainer container){ super(container.$form()); this.activity = container.$context(); this.context = container.$context(); this.animView = new LottieAnimationView(context); } @SimpleFunction public void Initialize(AndroidViewComponent view){ FrameLayout bro = (FrameLayout) view.getView(); bro.addView(animView); animView.addAnimatorListener(new AnimatorListener() { @Override public void onAnimationCancel(Animator animator) { Cancelled(); } @Override public void onAnimationEnd(Animator animator) { Ended(); } @Override public void onAnimationRepeat(Animator animator) { Repeated(); } @Override public void onAnimationStart(Animator animator) { Started(); } }); animView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Clicked(); } }); animView.setFailureListener(new LottieListener(){ public void onResult(Object result){ Result(result); } }); animView.addAnimatorPauseListener(new Animator.AnimatorPauseListener(){ public void onAnimationPause(Animator animation){ Paused(); } public void onAnimationResume(Animator animation){ Resumed(); } }); animView.addLottieOnCompositionLoadedListener(new LottieOnCompositionLoadedListener(){ public void onCompositionLoaded(LottieComposition composition){ CompositionLoaded(); } }); } @SimpleEvent public void Cancelled(){ EventDispatcher.dispatchEvent(this, "Cancelled"); } @SimpleEvent public void CompositionLoaded(){ EventDispatcher.dispatchEvent(this, "CompositionLoaded"); } @SimpleEvent public void Result(Object result){ EventDispatcher.dispatchEvent(this, "Result", result); } @SimpleEvent public void Paused(){ EventDispatcher.dispatchEvent(this, "Paused"); } @SimpleEvent public void Resumed(){ EventDispatcher.dispatchEvent(this, "Resumed"); } @SimpleEvent public void Ended(){ EventDispatcher.dispatchEvent(this, "Ended"); } @SimpleEvent public void Repeated(){ EventDispatcher.dispatchEvent(this, "Repeated"); } @SimpleEvent public void Started(){ EventDispatcher.dispatchEvent(this, "Started"); } @SimpleEvent public void Clicked(){ EventDispatcher.dispatchEvent(this, "Clicked"); } @SimpleFunction public void PlayAnimation(){ animView.playAnimation(); } @SimpleFunction public void PauseAnimation(){ animView.pauseAnimation(); } @SimpleFunction public void ResumeAnimation(){ animView.resumeAnimation(); } @SimpleProperty public void IgnoreDisabledSystemAnimations(boolean ignore){ animView.setIgnoreDisabledSystemAnimations(ignore); } @SimpleProperty public void EnableMergePathsForKitKatAndAbove(boolean enable){ animView.enableMergePathsForKitKatAndAbove(enable); } @SimpleProperty public void CacheComposition(boolean compo){ animView.setCacheComposition(compo); } @SimpleProperty public void OutlineMasksAndMattes(boolean outline){ animView.setOutlineMasksAndMattes(outline); } @SimpleProperty public void AnimationFromJson(String json){ animView.setAnimationFromJson(json); } @SimpleProperty public void AnimationFromUrl(String url){ animView.setAnimationFromUrl(url); } @SimpleProperty public void MinFrame(int frame){ animView.setMinFrame(frame); } @SimpleProperty public float LottieMinFrame() { return animView.getMinFrame(); } @SimpleProperty public float LottieMaxFrame() { return animView.getMaxFrame(); } @SimpleProperty public void MinProgress(float minProgress){ animView.setMinProgress(minProgress); } @SimpleProperty public void MaxFrame(int maxFrame){ animView.setMaxFrame(maxFrame); } @SimpleProperty public void File(String file){ try { InputStream input = context.getAssets().open(file); byte[] buffer = new byte[input.available()]; input.read(buffer); input.close(); String json = new String(buffer, "UTF-8"); animView.setAnimationFromJson(json); } catch (IOException e) { } } @SimpleProperty public void MinAndMaxFrame(String markerName){ animView.setMinAndMaxFrame(markerName); } @SimpleFunction public void ReverseAnimationSpeed(){ animView.reverseAnimationSpeed(); } @SimpleProperty public void Speed(float speed){ animView.setSpeed(speed); } @SimpleProperty public void Loop(boolean mustLoop){ animView.loop(mustLoop); } @SimpleProperty public void RepeatMode(int repeatMode){ animView.setRepeatMode(repeatMode); } @SimpleProperty public int Restart(){ return ValueAnimator.RESTART; } @SimpleProperty public int Reverse(){ return ValueAnimator.REVERSE; } @SimpleProperty public int Infinite(){ return ValueAnimator.INFINITE; } @SimpleProperty public void RepeatCount(int repeatCount){ animView.setRepeatCount(repeatCount); } @SimpleProperty public void Scale(float scale){ animView.setScale(scale); } @SimpleFunction public void CancelAnimation(){ animView.cancelAnimation(); } @SimpleProperty public void Frame(int frame){ animView.setFrame(frame); } @SimpleProperty public void Progress(int progress){ animView.setProgress(progress); } @SimpleProperty public void PerformanceTrackingEnabled(boolean enabled){ animView.setPerformanceTrackingEnabled(enabled); } @SimpleProperty public void SafeMode(boolean isSafe){ animView.setSafeMode(isSafe); } @SimpleProperty public void ApplyingOpacityToLayersEnabled(boolean enabled){ animView.setApplyingOpacityToLayersEnabled(enabled); } @SimpleFunction public void DisableExtraScaleModeInFitXY(){ animView.disableExtraScaleModeInFitXY(); } }