RecyclerView : How to create insert animation effect?

前端 未结 3 456
悲哀的现实
悲哀的现实 2020-12-29 13:56

I have a ReyclerView working with a LinearLayoutManager and an Adapter. I have a list of items I would like to disp

相关标签:
3条回答
  • 2020-12-29 14:04

    This works for me:

    animation.setStartOffset(position*100);
    
    0 讨论(0)
  • 2020-12-29 14:15

    Add this line to your RecyclerView xml:

    android:animateLayoutChanges="true"

    0 讨论(0)
  • 2020-12-29 14:18

    Below is how I add an animation in my Adapter. This will animate a push effect, with the row coming in from the right.

    First define the animation in xml (res/anim/push_left_in.xml)

    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="100%p" android:toXDelta="0"
            android:duration="300"/>
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="300" />
    </set>
    

    Then set it in your Adapter as so

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row;
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            row = inflater.inflate(R.layout.music_list_item, null);
        } else {
            row = convertView;
        }
    
        ...
    
        //Load the animation from the xml file and set it to the row
        Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.push_left_in);
        animation.setDuration(500);
        row.startAnimation(animation);
    
        return row;
    }
    

    This animation will be displayed each time you add a new row, it should work in your case.

    Edit

    This is how you could add an animation using a RecyclerView

    @Override
    public void onBindViewHolder(ViewHolder holder, int position)
    {
        holder.text.setText(items.get(position));
    
        // Here you apply the animation when the view is bound
        setAnimation(holder.container, position);
    }
    
    /**
     * Here is the key method to apply the animation
     */
    private void setAnimation(View viewToAnimate, int position)
    {
        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition)
        {
            Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.push_left_in);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }
    
    0 讨论(0)
提交回复
热议问题