AndroidViewAnimations
AndroidViewAnimations copied to clipboard
SlideInUp animation raises NullPointerException in RecyclerView
Hi!
This is the first time I'm using this library in a RecyclerView. I'm running
// now animate the shit out of this baby
YoYo.with(Techniques.SlideInUp).playOn(holder.cardView);
And it raises a NPE. Other animation techniques don't do this.
Are you missing the duration?
Is holder.cardView not null ?
Can you provide with a complete stacktrace?
Note. I don't think this has anything to do with the duration. I first run it with duration and I had the same problem. As I said before, I run the exact same code with a different animation technique Techniques.FadeIn and I had no problem.
Here's my stacktrace
09-21 12:34:58.024 24330-24330/com.asoriba.android E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.daimajia.androidanimations.library.sliders.SlideInUpAnimator.prepare(SlideInUpAnimator.java:37)
at com.daimajia.androidanimations.library.BaseViewAnimator.animate(BaseViewAnimator.java:50)
at com.daimajia.androidanimations.library.YoYo.play(YoYo.java:152)
at com.daimajia.androidanimations.library.YoYo.access$900(YoYo.java:36)
at com.daimajia.androidanimations.library.YoYo$AnimationComposer.playOn(YoYo.java:106)
at com.asoriba.android.adapters.AnnouncementAdapter.onBindViewHolder(AnnouncementAdapter.java:92)
at com.asoriba.android.adapters.AnnouncementAdapter.onBindViewHolder(AnnouncementAdapter.java:38)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5138)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4433)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4326)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1955)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1364)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1327)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:556)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2713)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3011)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:562)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1694)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1552)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:907)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1694)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1552)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1694)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1552)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1465)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:14905)
at android.view.ViewGroup.layout(ViewGroup.java:4601)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2213)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2027)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1237)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5164)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
at android.
Looks like it's related to your View, and it's parent. This particular technique references the parent, so you might want to double check the view you are passing in.
https://github.com/daimajia/AndroidViewAnimations/blob/master/library%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdaimajia%2Fandroidanimations%2Flibrary%2Fsliders%2FSlideInUpAnimator.java#L37
Same issue. So the CardView(the view that I am passing) is the root of the card. Is it's parent the RecyclerView ? or the RecyclerView's parent?
ViewGroup parent = (ViewGroup) target.getParent(); parent is null after this for me.
This method seems to get the parent and does a translate animation on the card to translate it to the parent while fading it in. This is exactly what I want Can you guide me as to how to proceed with this ?
I got it. @karthikprasad328 Desing your layout like this.
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.CardView android:id="@+id/yourCardViewID" android:layout_width="match_parent" android:layout_height="wrap_content"> </LinearLayout>
the cardView you are providing must be a child element. Here LinearLayout is Parent CardView is Child.