Skip to content

skymarginal/Conversation

Repository files navigation

对话式列表

重写RecyclerView默认动画DefaultItemAnimator,修改其中添加动画的方法;

主要方法:
animateAdd(final ViewHolder holder);
animateAddImpl(final ViewHolder holder);

修改如下:

@Override
public boolean animateAdd(final ViewHolder holder) {
    resetAnimation(holder);
    ViewCompat.setAlpha(holder.itemView, 0f);
    if(holder instanceof ConversationAdapter.ProblemTextHolder){
        ViewCompat.setTranslationX(holder.itemView, holder.itemView.getWidth());
    }else {
        ViewCompat.setScaleX(holder.itemView,0f);
        ViewCompat.setScaleY(holder.itemView,0f);
    }
    mPendingAdditions.add(holder);
    return true;
}    
void animateAddImpl(final ViewHolder holder) {
    final ContentEnum searchEnum;
    final View view = holder.itemView;
    final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view);
    mAddAnimations.add(holder);
    if(holder instanceof ConversationAdapter.ProblemTextHolder){
        animation.alpha(1f).translationX(1f).setDuration(getAddDuration()/2);
        searchEnum = ContentEnum.PROBLEM_TEXT;
    }else if(holder instanceof ConversationAdapter.AnswerLoadingHolder){
        animation.alpha(1f).scaleX(1f).scaleY(1f).setDuration(getAddDuration());
        searchEnum = ContentEnum.ANSWER_LOADING;
    }else {
        animation.alpha(1f).scaleX(1f).scaleY(1f).setDuration(getAddDuration());
        searchEnum = ContentEnum.ANSWER_TEXT;
    }
    animation.setListener(new ViewPropertyAnimatorListener() {
        @Override
        public void onAnimationStart(View view) {
            dispatchAddStarting(holder);
        }

        @Override
        public void onAnimationCancel(View view) {
            ViewCompat.setAlpha(view, 1f);
        }

        @Override
        public void onAnimationEnd(View view) {
            animation.setListener(null);
            dispatchAddFinished(holder);
            mAddAnimations.remove(holder);
            dispatchFinishedWhenDone();
            if(animationEndListener != null){
                animationEndListener.onAnimationEnd(searchEnum);
            }
        }
    });
    animation.start();
}

最终效果:

有收获的朋友点个赞吧!

About

RecyclerView修改默认动画实现对话式Item添加效果

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages