AndroidViewAnimations icon indicating copy to clipboard operation
AndroidViewAnimations copied to clipboard

SlideInUp animation raises NullPointerException in RecyclerView

Open jessejohnson opened this issue 10 years ago • 5 comments

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.

jessejohnson avatar Sep 21 '15 12:09 jessejohnson

Are you missing the duration? Is holder.cardView not null ? Can you provide with a complete stacktrace?

robertoestivill avatar Sep 21 '15 12:09 robertoestivill

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.

jessejohnson avatar Sep 21 '15 12:09 jessejohnson

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

robertoestivill avatar Sep 21 '15 13:09 robertoestivill

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 ?

karthikprasad328 avatar May 12 '17 19:05 karthikprasad328

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.

ghost avatar Jul 03 '17 17:07 ghost