【问题标题】:Stop animation after recyclerview inflates screenrecyclerview 膨胀屏幕后停止动画
【发布时间】:2017-09-02 10:06:13
【问题描述】:

我有一个特殊的动画来填充我的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);
}

【问题讨论】:

    标签: android animation android-recyclerview


    【解决方案1】:

    从 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.setItemAnimator(new MyItemAnimator());

    试试这个:)

    【讨论】:

    • 我相信这个链接告诉我如何结束动画。我可以做到,但我需要知道如何在充气后结束动画。这对我来说是棘手的部分。
    • 它只会在通货膨胀时产生动画,之后不会。
    • 谢谢,我会努力的!
    【解决方案2】:

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

    【讨论】:

    • 我不想定位最后一项,我想定位 RecyclerView 已完成充气。这将是一个小得多的数字。
    • 您的要求是在RecyclerView 开始创建/膨胀时开始动画,并在完成后停止动画。我对吗?为了正确理解您当前使用 RecyclerView 所做的事情,您还必须提供使用此 recyclerView 的代码(即您的 Activity
    • 无论如何,this answer 可能仍然有帮助。这包含一个在布局完全加载/膨胀时调用的侦听器。
    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多