android-如何使用仅在开始时起作用的偏移动画重复

时间:2018-03-07 17:45:44

标签: android

我有一系列视图,我尝试使用相同的动画制作所有视图但在开头有不同的延迟:

View[] arr;
for(int i=0;i<arr.length;i++)
{
    Animation anim=new TranslateAnimation(0,0,0,-200);
    anim.setRepeatCount(Animation.INFINITE);
    anim.setDuration(300);
    anim.setRepeatMode(2);
    anim.setStartTime(startTime+i*1000);
    arr[i].startAnimation(anim);
}

我也曾尝试使用setStartOffSet(i*100),但每次都会发生(每次重复都有延迟),而不仅仅是动画的开头,所以它们不同步。

我想在开始时只暗示一次延迟。

1 个答案:

答案 0 :(得分:0)

延迟很糟糕

如果您将视图插入ListView,您只需要这样:

&#13;
&#13;
...

ListView list = (ListView) findViewById(...);

ArrayAdapter mAdapter = new ArrayAdapter < Item > (getContext(), R.layout.ITEM_LAYOUT, Your_itemArray) {
  @NonNull
  @Override
  public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View myView;
    ...

    if (convertView == null) {
      LayoutInflater inflater = getLayoutInflater();
      myView = inflater.inflate(R.layout.ITEM_LAYOUT, parent, false);
      ...

    } else {
      myView = convertView;
    }


    // -----YOUR ANIMATION TIME--------------------------------------
    ObjectAnimator anim = ObjectAnimator.ofFloat(myView, View.TRANSLATION_X, You_Desired_Distance, 0);
    anim.setInterpolator(WHATEVER_INTERPOLATION_YOU_WANT);
    anim.setDuration(300).start();
    //---------------------------------------------------------------


    return myView;
  }
}


list.setAdapter(mAdapter);

...
&#13;
&#13;
&#13;

这将一个接一个地动画视图,就像你想要的那样

但是,如果您正在使用RecyclerView,则可以使用ViewHolder执行此操作。

如果你根本不使用任何类型的列表,那么这不会很有效率,你必须使用大量的DELAYS和延迟是不好的

尝试避免延迟并使用列表

此外,ObjectAnimators是如此强大,所以仔细研究它们以获得最佳的动画效果