我使用以下代码成功将onPreDraw动画添加到RecyclerView。在设置适配器后立即调用此函数。
public void initialRVAnimation() {
rvAnims = new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
rv.getViewTreeObserver().removeOnPreDrawListener(this);
for (int i = 0; i < rv.getChildCount(); i++) {
View v = rv.getChildAt(i);
v.setTranslationY(Utils.getScreenHeight(LiveThreadActivity.this));
v.animate()
.setStartDelay(50 * i)
.translationY(0)
.setInterpolator(new DecelerateInterpolator(3.f))
.setDuration(700)
.start();
}
return true;
}
};
rv.getViewTreeObserver().addOnPreDrawListener(rvAnims);
}
但是,这会在向RecyclerView添加项目时出现问题。这些项目似乎继承了动画中指定的开始延迟,并且当一个新项目被添加到RecyclerView的顶部时,而不是一次向下移动的所有项目,它们以交错的方式移动。 Here's a video to demonstrate the problem.当不使用onPreDraw动画时,normal animation when adding items为{。{}}。
使用以下代码将项目添加到RecyclerView。
public void addItem(View v) {
data.add(1, new Comment());
adapter.notifyItemInserted(1);
}