我想在回收商查看物品时添加动画。不是当我滚动,或者在项目被添加之后。我试图模仿的行为与当您有FloatingActionMenu并将FloatingActionButtons添加到该菜单时类似。菜单打开,逐个显示项目。我如何完成这种行为?我没有使用FloatingActionMenu或FloatingActionButtons,因为我想膨胀更复杂的视图。正如你可以看到,这些菜单被限制如何使用回收站视图创建浮动操作按钮菜单行为?
我曾尝试在onBindViewHolder添加动画,但这是为时已晚。所有项目都在同一时间添加,动画全部同时发生,而不是按顺序发生。想到的唯一想法是将项目逐个添加到适配器,并对notifyDataSet进行更改,但我想挑选社区的大脑来查看是否有更好的方法。这里是我的适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private final static int FADE_DURATION = 10000; // in milliseconds
private Context mContext;
private String[] mContent;
public MyAdapter(Context context, String[] content) {
mContext = context;
mContent = content;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.items, parent, false));
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
holder.tvText.setText(mContent[position]);
// Set the view to fade in
setScaleAnimation(holder.itemView);
}
@Override
public int getItemCount() {
return mContent.length;
}
private void setFadeAnimation(View view) {
AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(FADE_DURATION);
view.startAnimation(anim);
}
private void setScaleAnimation(View view) {
ScaleAnimation anim = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
anim.setDuration(FADE_DURATION);
view.startAnimation(anim);
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView tvText;
public ViewHolder(View itemView) {
super(itemView);
tvText = (TextView) itemView.findViewById(R.id.tv_text);
}
}
}
这是我如何初始化和将数据发送到我的适配器
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
rv.setLayoutManager(layoutManager);
mAdapter = new MyAdapter(mContext, mContent);
rv.setAdapter(mAdapter);
我曾尝试一些其他的事情是控制项目的时间,因为他们加入。我尝试使用setItemAnimator,然后设置项目的addDuration。没有一个按预期工作。
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
rv.setLayoutManager(layoutManager);
mAdapter = new MyAdapter(mContext, mContent);
DefaultItemAnimator animation = new DefaultItemAnimator();
animation.setAddDuration(100000); // << this attribute seems to make no difference
rvItems.setItemAnimator(animation);
rv.setAdapter(mAdapter);
你可能想创建一个['ItemAnimator'(https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ItemAnimator.html)。请注意,您不必从头开始,它可能足以扩展该页面上列出的现有子类之一。 – Karakuri
@Karakuri itemAnimator似乎只适用于可滚动项目。所以当我滚动时,滚动时添加的第一个项目上发生的动画。我需要拦截项目,然后才能添加和绑定。 – portfoliobuilder
我不知道你的意思是“可滚动”的物品。文档建议可以动画添加,移动,更改和删除项目。 – Karakuri