使用onPreDraw()使用RecyclerView动画的奇怪行为

时间:2016-08-13 18:44:33

标签: android

我使用以下代码成功将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);
}

0 个答案:

没有答案