【问题标题】:Item animation of RecyclerView in androidandroid中RecyclerView的item动画
【发布时间】:2015-10-11 19:03:00
【问题描述】:

当我在 RecyclerView 中使用动画时遇到问题,我想在所有项目的 RelativeLayout 上启动 TranslateAnimation,并在结束时 setFillAfter(true) 保持动画,动画开始时一切看起来都很好,但是当我滚动 RecyclerView 如下所示:

[

某些项目的动画丢失:

[

这是我的代码:

public class MainActivity extends Activity {
private static final List<Model> DATA = Model.getModels();
private List<RelativeLayout> layouts = new ArrayList<>();

@InjectView(R.id.recycler_view)
RecyclerView recyclerView;
@InjectView(R.id.main_edit_btn)
Button btnEdit;

private MainAdapter adapter;

private boolean isEdit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ac_main);
    ButterKnife.inject(this);
    recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    adapter = new MainAdapter();
    recyclerView.setAdapter(adapter);
}

@OnClick(R.id.main_all_btn)
public void selectAll() {

}

@OnClick(R.id.main_del_btn)
public void delete() {

}

@OnClick(R.id.main_edit_btn)
public void edit() {
    if (isEdit) {
        btnEdit.setText("Edit");
        isEdit = false;
        for (Model model : DATA) {
            model.isEdit = false;
        }
    } else {
        btnEdit.setText("Cancel");
        isEdit = true;
        for (Model model : DATA) {
            model.isEdit = true;
        }
    }
    adapter.notifyDataSetChanged();
}

class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainHolder> {
    @Override
    public MainHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new MainHolder(LayoutInflater.from(MainActivity.this)
                .inflate(R.layout.ac_main_item, parent, false));
    }

    @Override
    public void onBindViewHolder(MainHolder holder, int position) {
        holder.tvTitle.setText(DATA.get(position).title);
        holder.tvDate.setText(DATA.get(position).date);
        if (DATA.get(position).isEdit) {
            holder.startAnim();
        }
    }

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

    class MainHolder extends RecyclerView.ViewHolder {
        @InjectView(R.id.main_item_title_tv)
        TextView tvTitle;
        @InjectView(R.id.main_item_date_tv)
        TextView tvDate;
        @InjectView(R.id.main_item_content_rl)
        RelativeLayout rlContent;

        public MainHolder(View itemView) {
            super(itemView);
            ButterKnife.inject(this, itemView);
        }

        public void startAnim() {
            Animation anim = new TranslateAnimation(0, 100, 0, 0);
            anim.setDuration(500);
            anim.setFillEnabled(true);
            anim.setFillAfter(true);
            rlContent.startAnimation(anim);
        }
    }
}

}

有人可以帮我解决这个问题吗?谢谢。

【问题讨论】:

    标签: android animation


    【解决方案1】:

    我的猜测是该视图在屏幕上可见之前已完成绑定,从而阻止动画运行。当列表移动时,动画也很刺耳。最好只在列表不移动时为视图设置动画。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      相关资源
      最近更新 更多