【问题标题】:Recycler view. Animate each item on create回收站视图。在创建时为每个项目设置动画
【发布时间】:2016-07-02 18:07:28
【问题描述】:

我想延迟动画每个视图。目前所有项目都在创建时一起动画。并且只有当我滚动新添加的项目时才会有动画,所以我想在回收站视图中为最初创建的项目设置动画这是我在回收站视图适配器中的代码

 private void setAnimation(View viewToAnimate, int position)
    {
        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition)
        {
            Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_left);
            animation.setDuration(1000);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }

 @Override
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {

        Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/gothamlight.ttf");
        NavigationData navigationData = arrayList.get(position);
        holder.NavigationImage.setImageResource(navigationData.getImg_res());
        holder.NavigationTitle.setText(navigationData.getNavigationTitle());
        holder.NavigationTitle.setTypeface(tf);
        setAnimation(holder.Container, position);

    }

【问题讨论】:

  • 问题是你在 onBindViewHolder 中启动动画,它声明:“/** * 由 RecyclerView 调用以在指定位置显示数据。此方法 * 应该更新 { @link ViewHolder#itemView} 在给定位置反映项目。”因此,每当屏幕上显示一个项目时,它就会启动动画。

标签: android animation android-recyclerview adapter


【解决方案1】:

尝试增加动画文件中的持续时间,即 slide_left 在您的情况下。

slide_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1000"
        android:fromXDelta="100%"
        android:toXDelta="0%" >
    </translate>
</set>

【讨论】:

    【解决方案2】:

    我找到的解决方案是用默认动画持续时间声明一个持续时间的整数,并且在设置动画中我有持续时间 = 持续时间 + 300。而且效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      相关资源
      最近更新 更多