{"record":{"id":"5f115b25790585b4","repo":"airbnb/lottie-android","slug":"this-animation-does-not-support-split-dimensions","errorCode":null,"errorMessage":"This animation does not support split dimensions!","messagePattern":"This animation does not support split dimensions!","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"lottie/src/main/java/com/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation.java","lineNumber":211,"sourceCode":"      valueCallback.setAnimation(this);\n    }\n  }\n\n  public boolean hasValueCallback() {\n    return valueCallback != null;\n  }\n\n  /**\n   * keyframeProgress will be [0, 1] unless the interpolator has overshoot in which case, this\n   * should be able to handle values outside of that range.\n   */\n  abstract A getValue(Keyframe<K> keyframe, float keyframeProgress);\n\n  /**\n   * Similar to {@link #getValue(Keyframe, float)} but used when an animation has separate interpolators for the X and Y axis.\n   */\n  protected A getValue(Keyframe<K> keyframe, float linearKeyframeProgress, float xKeyframeProgress, float yKeyframeProgress) {\n    throw new UnsupportedOperationException(\"This animation does not support split dimensions!\");\n  }\n\n  private static <T> KeyframesWrapper<T> wrap(List<? extends Keyframe<T>> keyframes) {\n    if (keyframes.isEmpty()) {\n      return new EmptyKeyframeWrapper<>();\n    }\n    if (keyframes.size() == 1) {\n      return new SingleKeyframeWrapper<>(keyframes);\n    }\n    return new KeyframesWrapperImpl<>(keyframes);\n  }\n\n  private interface KeyframesWrapper<T> {\n\n    boolean isEmpty();\n\n    boolean isValueChanged(float progress);\n","sourceCodeStart":193,"sourceCodeEnd":229,"githubUrl":"https://github.com/airbnb/lottie-android/blob/05ea92e90381eb8a8ae06855ea2b74f322bebbec/lottie/src/main/java/com/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation.java#L193-L229","documentation":"Thrown by the default BaseKeyframeAnimation#getValue(keyframe, linearProgress, xProgress, yProgress). This three-argument overload exists for animations that support separate X/Y interpolation; the base implementation throws because most animation types do not support split dimensions. Only subclasses that override it (e.g. PointKeyframeAnimation) accept split-axis progress.","triggerScenarios":"Internally, the animation engine routes split-dimension interpolation (e.g. a path/position with separate X and Y easing) to an animation subclass whose getValue(x,y) was not overridden. This reflects an unsupported combination of split-path keyframes with an animation type that only handles unified progress.","commonSituations":"A Lottie file with split easing on a property whose keyframe animation type does not implement split dimensions, often from an edge-case After Effects export; an unsupported animated property type combined with separate dimension keyframes.","solutions":["Re-export the animation without split-dimension (separate X/Y) easing on the offending property.","Upgrade lottie-android; support for split dimensions may have been extended to more animation types.","Identify the offending layer/keyframe by enabling Lottie debug logging and simplify that property's keyframes."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// This is internal to the engine; surface and degrade rather than crash\nlottieAnimationView.setFailureListener(t -> {\n  if (t instanceof UnsupportedOperationException\n      && t.getMessage() != null && t.getMessage().contains(\"split dimensions\")) {\n    Log.w(TAG, \"animation unsupported on this build, skipping\", t);\n  } else throw new RuntimeException(t);\n});","preventionTips":["Re-export animations without split-dimension (separate X/Y) easing on unsupported properties.","Keep lottie-android up to date; split-dimension coverage improves over releases.","In debug builds, parse every asset with LottieCompositionFactory to catch unsupported combos early."],"tags":["keyframe","animation","split-dimensions","internal"],"backgroundTag":null,"analyzedSha":"05ea92e90381eb8a8ae06855ea2b74f322bebbec","analyzedAt":"2026-08-14T00:51:35.636Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}