Как использовать 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()
, он вызывает для вас подходящую анимацию.
Ответ 2
Возможно, вы ищете эту удивительную библиотеку!
https://github.com/wasabeef/recyclerview-animators
Ответ 3
Возможно, вы ищете эту удивительную библиотеку!
https://github.com/wasabeef/recyclerview-animators
Он имеет много анимаций для использования.
Просто реализуйте его и используйте любую понравившуюся анимацию!