Mic*_*ael 8 animation android recycler-adapter android-recyclerview
我想用延迟(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;
}
}
Run Code Online (Sandbox Code Playgroud)
我在回收站视图中显示6条消息.
问题是何时启用滚动.(我没有使用onViewDetachedFromWindow启用滚动的方法).如果我使用解决方案(向上),那么我接受重复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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1482 次 |
| 最近记录: |