我有一个使用CardView布局填充的回收视图(recycled view)。我注意到在许多应用中,这些项都有一个漂亮的动画效果进入,而不是像我的应用程序中那样突然出现。下面展示了我想要实现的示例:
![图片描述](https://istack.dev59.com/MY6pk.gif)
我应该如何使用swipeRefreshListener/adapter来触发此动画?我该如何通过我的适配器(adapter)实现它?
注意:我需要这个动画在RecyclerView第一次填充CardView项和它们包含的数据时也能被触发。
我的RecyclerView的适配器(adapter)如下所示:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private String[] mDataset;
private String[] mClassDataset;
private int lastPosition = -1;
private Context context;
View view;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public TextView mClassDataView;
CardView container;
public ViewHolder(View itemView) {
super(itemView);
mTextView = (TextView)itemView.findViewById(R.id.grade);
mClassDataView = (TextView)itemView.findViewById(R.id.class_name);
container = (CardView)itemView.findViewById(R.id.card_view);
}
}
public RecyclerAdapter(String[] myDataset, String[] classData, Context context) {
mDataset = myDataset;
mClassDataset = classData;
this.context = context;
}
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_item, parent, false);
ViewHolder vh = new ViewHolder(v);
view = v;
return vh;
}
@Override
public int getItemCount() {
return mClassDataset.length;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if (mDataset.length < mClassDataset.length) {
holder.mTextView.setText("N/A");
holder.mClassDataView.setText(mClassDataset[position]);
if (mClassDataset[position].equals("N/A")) {
}
} else {
holder.mTextView.setText(mDataset[position]);
holder.mClassDataView.setText(mClassDataset[position]);
}
for (int i = 0; i < getItemCount(); i++) {
animate(view, i);
}
}
private void animate(final View view, final int position){
Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
view.startAnimation(animation);
lastPosition = position;
}
}
目前动画正在工作,但问题是所有项目都在同时被动画化。我尝试通过创建自定义的getChild()
方法遍历项目,但那并没有起作用。不知何故,我需要单独访问/动画每个子元素,并可能在每个动画之间设置延迟。但是,我不确定如何实现这一点。我知道我可以使用 Handler 来设置延迟,但访问每个子元素是一个问题。
我有一个小问题:如果我将RecyclerView包装在SwipeRefreshLayout中,它会在我“拉动”SwipeRefreshLayout时立即触发动画。有没有办法防止这种情况发生? - just_deko