在recyclerview膨胀屏幕后停止动画

时间:2017-04-07 06:24:18

标签: android animation android-recyclerview

我有一个特殊的动画,为我的RecyclerView填充卡片。动画效果很好(至少对于膨胀)。我不想在初始通货膨胀后使用这个动画。换句话说,我不希望任何动画用于滚动(或者在用户填充用户屏幕的初始充气后,用户真正采取任何动作)。我无法弄清楚如何获取位置编号 - 或者 - 在填充之后关闭动画 - 或 - 以任何方式执行此操作。我的动画在适配器中调用。这是我用来设置动画的适配器代码。

public class TagAdapter extends RecyclerView.Adapter<TagAdapter.ViewHolder>{
private ArrayList<TagDataModel> dataSet;
private Context context;

public TagAdapter (ArrayList<TagDataModel> ds, Context ctx){
    this.dataSet =ds;
    this.context =ctx;
}

class ViewHolder extends RecyclerView.ViewHolder {
    TextView tv_tag;
    ArrayList<TagDataModel> dataSet = new ArrayList<>();
    Context context;
    CardView card;

    ViewHolder(View itemView, Context ctx, ArrayList<TagDataModel> ds) {
        super(itemView);
        this.dataSet = ds;
        this.context =ctx;
        this.tv_tag = (TextView) itemView.findViewById(R.id.tv_cardTag);
        this.card = (CardView) itemView.findViewById(R.id.card_view_tag);
    }
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_tag, parent, false);
    ViewHolder viewHolder = new ViewHolder(view, context, dataSet);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
    final int activePosition = context.getSharedPreferences("userPrefs", Context.MODE_PRIVATE).getInt("np_tag", 0);
    TextView tv_tag = holder.tv_tag;
    CardView card = holder.card;
    tv_tag.setText(dataSet.get(position).getTag());

    });
    animate(holder.itemView, position);  //animate only first page UPDATE
}

@Override
public int getItemCount() {
    return dataSet.size();
}

private void animate(View view, final int pos) {
    view.animate().cancel();
    view.setTranslationY(100);
    view.setAlpha(0);
    view.animate().alpha(1.0f).translationY(0).setDuration(300).setStartDelay(pos *100);
}

2 个答案:

答案 0 :(得分:0)

从bindViewHolder中删除当前动画 使用自定义ItemAnimator并覆盖animateAdd方法。 您可以找到更多here

这应该会给你想要的结果。

public class MyItemAnimator extends DefaultItemAnimator {

 @Override
    public boolean animateAdd(ViewHolder viewHolder) {
        animate(viewHolder.itemView);
        return true;
    }

private void animate(View view) {
    view.setTranslationY(100);
    view.setAlpha(0);
    view.animate().alpha(1.0f).translationY(0).setDuration(300);
}


}

现在将此项目动画设置为您的recyclerview。

recyclerView.setItemAnimator(new MyItemAnimator());

试试这个:)

答案 1 :(得分:0)

如果您提供使用此Activity的{​​{1}}代码,将会很有帮助。无论如何,this answer将有助于您检测您的RecyclerView是否已到达最后一项。
this answer将帮助您检测您的布局是否完全创建/膨胀。