我想用延迟(20s)创建带有animatoin的聊天列表。在此之后,每个项目都应该消失,同时淡出动画。
如果我在不滚动的情况下使用RecyclerView
,则没有问题。
我在适配器中覆盖方法,一切正常。
@Override
public void onViewAttachedToWindow(final ViewHolder holder) {
if(holder.alpha == null) {
holder.alpha = ObjectAnimator.ofFloat(holder.itemView, View.ALPHA, 1f, 0f);
holder.alpha.setDuration(300);
holder.alpha.setStartDelay(20000);
holder.alpha.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
holder.profilePic.setEnabled(false);
holder.messageContainer.setEnabled(false);
if (items.size() > 0) {
items.remove(0);
notifyItemRemoved(0);
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
holder.alpha.start();
}
}
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
if(holder.alpha != null) {
holder.alpha.cancel();
holder.alpha = null;
}
}
我在回收站视图中显示6条消息。
问题是启用滚动时。 (我没有使用方法onViewDetachedFromWindow
来启用滚动)。如果我使用解决方案(up),那么我会重新使用动画重用ViewHolder
。来自itemView
的每个ViewHolder holder
都有动画。如果接收到第7个消息,则此消息已经具有来自重用持有者的动画。但onViewAttachedToWindow
中的动画再次为同一视图添加。
我无法在RecyclerView
中找到每个消息的动画解决方案。我尝试使用LayoutAnimationController
为每个孩子制作动画,或者使用LayoutManager
进行动画制作。
测试电影: https://www.dropbox.com/s/1sxdonpasq6lf0o/IMG_0262.MOV?dl=0
有什么想法吗?
[编辑:]
// Hnalder to remove item from RecyclerView
Handler removeItems = new Handler() {
@Override
public void handleMessage(Message msg) {
if(adapter != null && adapter.getItemCount() > 0) {
adapter.removeFirst();
}
}
};
...
//Fragment::initRecyclerView
...
chatView.setLayoutManager(layoutManager);
chatView.setAdapter(adapter);
chatView.setItemAnimator(new ChatItemAnimator());
//ChatAdapter::removeFirst()
public void removeFirst() {
items.removeFirst();
notifyItemRemoved(0);
}
//ChatItemAnimator
public class ChatItemAnimator extends BaseItemAnimator {
@Override
protected void animateRemoveImpl(RecyclerView.ViewHolder holder) {
ViewCompat.animate(holder.itemView)
.alpha(0)
.setDuration(300)
.setListener(new DefaultRemoveVpaListener(holder))
.start();
}
}
答案 0 :(得分:0)
我有一个非常相似的案例,所以我建议你做以下事情:
1-使用CountdownTimer为您的chatListItem创建自定义视图。
2-使用customview类中的startTimer()方法启动计时器,然后销毁已完成的项目。
3-使用此recyler animation library为ItemRemoved上的项目设置动画。