【发布时间】:2015-08-27 02:47:40
【问题描述】:
我有一个循环视图,其中填充了 CardView 布局。我注意到在许多应用程序中,这些项目有一个很好的动画入口,而不是像它们目前在我的应用程序中那样突然出现。我正在尝试实现的一个示例如下所示:
如何使用我的 swipeRefreshListener/adapter 来触发这个动画?我将如何通过我的适配器实现这一点?
注意:当 RecyclerView 首次填充 CardView 项目及其包含的数据时,我还需要触发此动画。
我的 RecyclerView 的适配器如下图:
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 来设置延迟,但是访问每个孩子是一个问题。
【问题讨论】: