material-components/material-components-android · error · IllegalArgumentException

Invalid slide direction: > slideEdge <

Error message

Invalid slide direction: > slideEdge <

What it means

SlideDistanceProvider.createTranslationAppearAnimator (SlideDistanceProvider.java:152) switches on the slide edge gravity to build the appear translation. Only Gravity.LEFT, TOP, RIGHT, BOTTOM, START and END are handled; any other gravity flag (or combination, or 0) falls to default and throws IllegalArgumentException when the transition's appear animation is created.

Source

Thrown at lib/java/com/google/android/material/transition/SlideDistanceProvider.java:152

        return createTranslationYAnimator(view, originalY - slideDistance, originalY, originalY);
      case Gravity.RIGHT:
        return createTranslationXAnimator(view, originalX - slideDistance, originalX, originalX);
      case Gravity.BOTTOM:
        return createTranslationYAnimator(view, originalY + slideDistance, originalY, originalY);
      case Gravity.START:
        return createTranslationXAnimator(
            view,
            isRtl(sceneRoot) ? originalX + slideDistance : originalX - slideDistance,
            originalX,
            originalX);
      case Gravity.END:
        return createTranslationXAnimator(
            view,
            isRtl(sceneRoot) ? originalX - slideDistance : originalX + slideDistance,
            originalX,
            originalX);
      default:
        throw new IllegalArgumentException("Invalid slide direction: " + slideEdge);
    }
  }

  private static Animator createTranslationDisappearAnimator(
      View sceneRoot, View view, @GravityFlag int slideEdge, @Px int slideDistance) {
    final float originalX = view.getTranslationX();
    final float originalY = view.getTranslationY();
    switch (slideEdge) {
      case Gravity.LEFT:
        return createTranslationXAnimator(view, originalX, originalX - slideDistance, originalX);
      case Gravity.TOP:
        return createTranslationYAnimator(view, originalY, originalY + slideDistance, originalY);
      case Gravity.RIGHT:
        return createTranslationXAnimator(view, originalX, originalX + slideDistance, originalX);
      case Gravity.BOTTOM:
        return createTranslationYAnimator(view, originalY, originalY - slideDistance, originalY);
      case Gravity.START:
        return createTranslationXAnimator(

View on GitHub (pinned to ac7e18efee)

Solutions

  1. Use one of the six supported absolutes: Gravity.LEFT, Gravity.TOP, Gravity.RIGHT, Gravity.BOTTOM, Gravity.START, Gravity.END.
  2. Normalize dynamic gravities before calling setSlideEdge: extract the single supported direction or fall back to a default.
  3. Never pass combined gravity masks — this API expects exactly one edge.

Example fix

// before
provider.setSlideEdge(Gravity.CENTER); // then transition crashes in createAppear

// after
provider.setSlideEdge(Gravity.BOTTOM);
Defensive patterns

Strategy: validation

Validate before calling

static boolean isSupportedSlideEdge(int edge) {
  return edge == Gravity.LEFT || edge == Gravity.TOP || edge == Gravity.RIGHT
      || edge == Gravity.BOTTOM || edge == Gravity.START || edge == Gravity.END;
}
if (!isSupportedSlideEdge(edge)) edge = Gravity.BOTTOM; // or fail fast with a clear message
provider.setSlideEdge(edge);

Type guard

static @GravityFlag int coerceSlideEdge(int candidate) {
  return isSupportedSlideEdge(candidate) ? candidate : Gravity.BOTTOM;
}

Prevention

When it happens

Trigger: Calling provider.setSlideEdge(g) with values like Gravity.CENTER, Gravity.FILL, a bitmask combination (Gravity.TOP | Gravity.START), or 0, then running a transition that triggers createAppear(); passing a clip-screen-edge gravity from window flags by mistake.

Common situations: Reusing gravity constants from unrelated layout code; using GravityCompat constants not in the supported set; passing composite gravity flags computed at runtime.

Related errors


AI-assisted analysis of material-components/material-components-android@ac7e18efee (2026-08-14). Data as JSON: /api/errors/97065473df6b7c6d. Report an issue: GitHub.