recyclerview设置行数_如何将enter animation设置为RecyclerView items?

我正在尝试以编程方式为所有RecyclerView项设置显示时的输入动画。

我可以使用XML动画文件成功地制作动画:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

recycler.layoutManager = LinearLayoutManager(this)

recycler.adapter = MyAdapter()

recycler.layoutAnimation = AnimationUtils.loadLayoutAnimation(this, R.anim.layout_animation_from_right)

//recycler.itemAnimator = SimpleItemAnimator()

recycler.adapter!!.notifyDataSetChanged()

recycler.scheduleLayoutAnimation()

}

}

这个解决方案工作得很好,但是我需要使用类扩展DefaultItemAnimator来设置动画。

为此,我创建了SimpleItemAnimator类并重写其animateApperance方法:

public class SimpleItemAnimator extends DefaultItemAnimator {

@Override

public boolean animateAppearance(@NonNull RecyclerView.ViewHolder viewHolder, @Nullable ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) {

Log.d("AnimationTag", "animateApperance");

final MyAdapter.SampleViewHolder holder = (MyAdapter.SampleViewHolder) viewHolder;

ObjectAnimator animator = ObjectAnimator.ofFloat(holder.mTextView, View.TRANSLATION_X, 0, holder.mTextView.getWidth() / 2);

animator.setDuration(2000);

animator.start();

return super.animateAdd(viewHolder);

}

}

然后我将其设置为RecyclerView:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

recycler.layoutManager = LinearLayoutManager(this)

recycler.adapter = MyAdapter()

// recycler.layoutAnimation = AnimationUtils.loadLayoutAnimation(this, R.anim.layout_animation_from_right)

recycler.itemAnimator = SimpleItemAnimator()

recycler.adapter!!.notifyDataSetChanged()

recycler.scheduleLayoutAnimation()

}

}

结果项没有设置动画,在日志中我找不到“animateApperance”,这意味着没有调用此方法。

我的问题:如何使用DefaultItemAnimator以编程方式设置RecyclerView项的动画?

顺便说一下,这是MyAdapter的代码:

public class MyAdapter extends RecyclerView.Adapter {

static class SampleViewHolder extends RecyclerView.ViewHolder {

public TextView mTextView;

public SampleViewHolder(TextView textView) {

super(textView);

mTextView = textView;

}

}

@NonNull

@Override

public SampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

TextView textView = (TextView) LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false);

return new SampleViewHolder(textView);

}

@Override

public void onBindViewHolder(@NonNull SampleViewHolder sampleViewHolder, int i) {

sampleViewHolder.mTextView.setText("item "+i);

}

@Override

public int getItemCount() {

return 5;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值