Как использовать ItemAnimator в RecyclerView?

Я хочу сделать анимацию, когда элемент добавляется или удаляется из адаптера recyclerview. Я пытаюсь использовать RecyclerView.ItemAnimator следующим образом, но он не работает.

    public class MyAnimator extends RecyclerView.ItemAnimator{

    @Override
    public boolean animateAdd(ViewHolder arg0) {
        Log.d("test","Added Animation");
        return false;
    }

    @Override
    public boolean animateChange(ViewHolder arg0, ViewHolder arg1, int arg2, int arg3, int arg4, int arg5) {
        Log.d("test","Change Animation");
        return false;
    }

    @Override
    public boolean animateMove(ViewHolder arg0, int arg1, int arg2, int arg3, int arg4) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean animateRemove(ViewHolder arg0) {
        Log.d("test", "Remove Animation");
        return false;
    }

    @Override
    public void endAnimation(ViewHolder arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void endAnimations() {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean isRunning() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void runPendingAnimations() {
        // TODO Auto-generated method stub

    }

}

Я использую следующий код следующим образом.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

    data=new ArrayList<String>();   


    // use a linear layout manager
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);

    animator = new MyAnimator();
    mRecyclerView.setItemAnimator(animator);            

    mAdapter = new MyAdapter(data);
    mRecyclerView.setAdapter(mAdapter); 

}

Всякий раз, когда я добавляю новый элемент в набор данных и звоню mAdapter.notifyDataSetChanged(), я ожидал, что журнал присутствует в animateAdd(ViewHolder arg0), присутствующий в классе MyAnimator; но это не придет. Я что-то упустил. Почему он не работает.

Ответы

Ответ 1

Прежде всего, для этого вам не нужен специальный ItemAnimator. Вы можете использовать по умолчанию один, удалите mRecyclerView.setItemAnimator(animator);

Кроме того, вы должны использовать notifyItemInserted() и notifyItemRemoved() вместо notifyDataSetChanged(), он вызывает для вас подходящую анимацию.

Ответ 3

Возможно, вы ищете эту удивительную библиотеку!

https://github.com/wasabeef/recyclerview-animators

Он имеет много анимаций для использования.

Просто реализуйте его и используйте любую понравившуюся анимацию!