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
- Use one of the six supported absolutes: Gravity.LEFT, Gravity.TOP, Gravity.RIGHT, Gravity.BOTTOM, Gravity.START, Gravity.END.
- Normalize dynamic gravities before calling setSlideEdge: extract the single supported direction or fall back to a default.
- 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
- Restrict slide edges to the six supported gravity absolutes.
- Reject composite gravity masks before they reach setSlideEdge.
- Centralize transition construction so edge validation happens in one place.
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
- Invalid slide direction: > slideEdge <
- Invalid axis: > axis <
- Invalid motion path type: > pathInt <
- Motion path theme attribute must either be an enum value or
- Setting alpha on is not supported
AI-assisted analysis of material-components/material-components-android@ac7e18efee (2026-08-14).
Data as JSON: /api/errors/97065473df6b7c6d.
Report an issue: GitHub.