Android 在recyclerview为屏幕充气后停止动画

Android 在recyclerview为屏幕充气后停止动画,android,animation,android-recyclerview,Android,Animation,Android Recyclerview,我有一个特殊的动画来填充我的回收视图的卡片。动画效果良好(至少对于充气)。我不希望在初始充气后使用此动画。换句话说,我不想要任何用于滚动的动画(或者在初始充注足够多的卡片以填满用户屏幕后,用户的任何动作)。我不知道如何抓取位置号-或-填充后关闭动画-或-以任何方式这样做。我的动画在适配器中被调用。下面是我用来设置动画的适配器代码 public class TagAdapter extends RecyclerView.Adapter<TagAdapter.ViewHolder>{ p

我有一个特殊的动画来填充我的
回收视图的卡片。动画效果良好(至少对于充气)。我不希望在初始充气后使用此动画。换句话说,我不想要任何用于滚动的动画(或者在初始充注足够多的卡片以填满用户屏幕后,用户的任何动作)。我不知道如何抓取位置号-或-填充后关闭动画-或-以任何方式这样做。我的动画在适配器中被调用。下面是我用来设置动画的适配器代码

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);
}
公共类TagAdapter扩展了RecyclerView.Adapter{ 私有ArrayList数据集; 私人语境; 公共标记适配器(ArrayList ds,上下文ctx){ this.dataSet=ds; this.context=ctx; } 类ViewHolder扩展了RecyclerView.ViewHolder{ 文本视图电视标签; ArrayList数据集=新的ArrayList(); 语境; CardView卡; ViewHolder(视图项视图、上下文ctx、ArrayList ds){ 超级(项目视图); this.dataSet=ds; this.context=ctx; this.tv_标记=(TextView)itemView.findViewById(R.id.tv_cardTag); this.card=(cardwiew)itemView.findviewbyd(R.id.card\u view\u标记); } } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ View=LayoutFlater.from(parent.getContext()).flate(R.layout.card_标记,parent,false); ViewHolder ViewHolder=新的ViewHolder(视图、上下文、数据集); 返回视图持有者; } @凌驾 public void onBindViewHolder(最终视图持有人,@SuppressLint(“RecyclerView”)最终整型位置){ final int activePosition=context.getSharedReferences(“userPrefs”,context.MODE\u PRIVATE).getInt(“np\u标记”,0); TextView电视标签=holder.tv标签; CardView卡=持有者.card; tv_tag.setText(dataSet.get(position.getTag()); }); 设置动画(holder.itemView,position);//仅设置第一页更新的动画 } @凌驾 public int getItemCount(){ 返回dataSet.size(); } 私有无效动画(视图,最终整数位置){ view.animate().cancel(); 视图。设置平移Y(100); 视图。setAlpha(0); view.animate().alpha(1.0f).translationY(0).setDuration(300).setStartDelay(位置*100); }
从bindViewHolder中删除当前动画并 使用自定义项Animator并覆盖AnimateAD方法。 你可以找到更多

这会给你想要的结果

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);
}


}
现在将此项目animator设置为您的recyclerview

setItemAnimator(新的MyItemAnimator())


尝试以下操作:)

从bindViewHolder中删除当前动画并 使用自定义项Animator并覆盖AnimateAD方法。 你可以找到更多

这会给你想要的结果

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);
}


}
现在将此项目animator设置为您的recyclerview

setItemAnimator(新的MyItemAnimator())


尝试以下操作:)

如果您在使用此
RecyclerView
的位置提供
活动的代码,这将非常有用。无论如何,这将有助于您检测
RecyclerView
是否已到达最后一项

并将帮助您检测布局是否已完全创建/膨胀。

如果您在使用此
RecyclerView
的位置提供
活动
的代码,将非常有用。无论如何,这将有助于您检测
RecyclerView
是否已到达最后一项

并将帮助您检测布局是否完全创建/膨胀。

我相信此链接告诉我如何结束动画。我可以做到,但我需要知道如何在通货膨胀后结束动画。这对我来说是一个棘手的部分。它只会在通货膨胀时产生动画效果,而不会在通货膨胀之后产生动画效果。谢谢,我会尝试的!我相信这个链接告诉我如何结束动画。我可以做到,但我需要知道如何在通货膨胀后结束动画。这对我来说是一个棘手的部分。它只会在通货膨胀时产生动画效果,而不会在通货膨胀之后产生动画效果。谢谢,我会尝试的!我不想针对最后一项,我想针对RecyclerView已完成充气。这将是一个小得多的数字。您的要求是在
RecyclerView
开始创建/膨胀时启动动画,并在完成后停止动画。我说得对吗?为了正确理解您当前正在使用的
RecyclerView
,您还必须提供使用此RecyclerView的代码(即您的
活动
),无论如何,这些代码可能仍然有用。这包含一个在布局完全加载/膨胀时调用的侦听器。我不想以最后一项为目标,我想以RecyclerView已完成膨胀为目标。这将是一个小得多的数字。您的要求是在
RecyclerView
开始创建/膨胀时启动动画,并在完成后停止动画。我说得对吗?为了正确理解您当前正在使用的
RecyclerView
,您还必须提供使用此RecyclerView的代码(即您的
活动
),无论如何,这些代码可能仍然有用。它包含一个侦听器,当布局完全加载/膨胀时调用该侦听器。