youth5201314/banner · error · IllegalStateException
Expected the page view to be managed by a ViewPager2…
Error message
Expected the page view to be managed by a ViewPager2 instance.
What it means
MZScaleInTransformer's transformPage() needs the ViewPager2 that owns the page view to apply scaling relative to the pager. It calls requireViewPager (via viewPager()), which throws IllegalStateException if the view being transformed is not a RecyclerView whose direct parent is a ViewPager2. This enforces that the transformer is only used as a ViewPager2 page transformer.
Solutions
- Ensure the transformer is only registered via viewPager2.setPageTransformer(new MZScaleInTransformer()) on a real ViewPager2.
- If you wrapped pages in an extra container, make the RecyclerView a direct child of ViewPager2, or remove the intermediate parent.
- Use a different/custom PageTransformer that does not require a ViewPager2 parent for non-pager RecyclerViews.
- Verify the parent chain: ((ViewGroup) view.getParent()) instanceof ViewPager2 must hold at transform time.
Example fix
// before Banner banner = new Banner(context); banner.setPageTransformer(new MZScaleInTransformer()); // banner's view is not ViewPager2-managed // after ViewPager2 viewPager2 = findViewById(R.id.view_pager); viewPager2.setPageTransformer(new MZScaleInTransformer()); // RecyclerView is direct child of ViewPager2
Defensive patterns
Strategy: type-guard
Validate before calling
ViewParent p = recyclerView.getParent();
if (!(p instanceof ViewPager2)) {
throw new IllegalStateException("RecyclerView must be a direct child of a ViewPager2 to use MZScaleInTransformer");
}
viewPager2.setPageTransformer(new MZScaleInTransformer()); Type guard
ViewParent p = pageView.getParent(); boolean isPagerChild = pageView instanceof RecyclerView && p instanceof ViewPager2; ViewPager2 vp2 = isPagerChild ? (ViewPager2) p : null;
Try / catch
try {
viewPager2.setPageTransformer(new MZScaleInTransformer());
} catch (IllegalStateException e) {
Log.w("Banner", "MZScaleInTransformer requires ViewPager2, skipping transformer", e);
} Prevention
- Register page transformers only via ViewPager2.setPageTransformer.
- Avoid inserting wrapper layouts between ViewPager2 and its page RecyclerView.
- Only use MZ* transformers with ViewPager2-style pagers, not plain RecyclerViews.
- Test transformer changes on real pager layouts, not standalone RecyclerViews.
When it happens
Trigger: Calling mzpTransformer on a plain RecyclerView not inside a ViewPager2; attaching the transformer via setOffscreenPageLimit/transformer to a non-ViewPager2 view; a custom parent container placed between the RecyclerView and ViewPager2 so getParent() is no longer ViewPager2; reusing the transformer on arbitrary views.
Common situations: Applying a ViewPager2 page transformer to a standalone RecyclerView; nesting pages inside additional FrameLayout/ConstraintLayout wrappers so the RecyclerView's parent is the wrapper, not the ViewPager2; copy-pasting the transformer onto a banner whose internal structure differs.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- getContext().getString(R.string.banner_adapter_null_error)
- The layoutManager must be LinearLayoutManager
AI-assisted analysis of youth5201314/banner@777c7dbfaa (2026-09-08).
Data as JSON: /api/errors/b2294af9e0384ded.
Report an issue: GitHub.
Appendix: source
Thrown at banner/src/main/java/com/youth/banner/transformer/MZScaleInTransformer.java:70
view.setScaleX(scale + mMinScale);
view.setScaleY(scale + mMinScale);
} else {
view.setScaleX(mMinScale);
view.setScaleY(mMinScale);
view.setTranslationX(-reduceX);
}
}
private ViewPager2 requireViewPager(@NonNull View page) {
ViewParent parent = page.getParent();
ViewParent parentParent = parent.getParent();
if (parent instanceof RecyclerView && parentParent instanceof ViewPager2) {
return (ViewPager2) parentParent;
}
throw new IllegalStateException(
"Expected the page view to be managed by a ViewPager2 instance.");
}
}
View on GitHub (pinned to 777c7dbfaa)