使用startOffset的动画相反

时间:2013-09-13 06:58:48

标签: android android-animation interpolation

我创建了以下动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/anticipate_overshoot_interpolator"
     >
  <translate
      android:fromXDelta="0"
      android:toXDelta="100%p"
      android:duration="500"
     />
  <translate
      android:fromXDelta="-100%p"
      android:toXDelta="0"
      android:startOffset="500"
      android:duration="500"/>
</set>

我在Android 2.3.6手机上测试它,动画按顺序进行但是反转。 首先,它从左到中,然后从中间到右边。我怎样才能以正确的顺序播放?

3 个答案:

答案 0 :(得分:1)

final ImageView iv = new ImageView(this);
iv.setScaleType(ScaleType.CENTER);
final Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.layer0);
iv.setImageBitmap(b);
OnClickListener l = new OnClickListener() {
    @Override
    public void onClick(View v) {
        float x = (iv.getWidth() + b.getWidth()) / 2;
        AnimationSet set = new AnimationSet(true);
        set.setFillBefore(false);

        Animation a;

        a = new TranslateAnimation(0, x, 0, 0);
        a.setDuration(500);
        a.setFillAfter(false);
        a.setFillBefore(false);
        a.setFillEnabled(true);
        set.addAnimation(a);

        a = new TranslateAnimation(-x, 0, 0, 0);
        a.setStartOffset(500);
        a.setDuration(500);
        a.setFillAfter(false);
        a.setFillBefore(false);
        a.setFillEnabled(true);
        set.addAnimation(a);

        iv.startAnimation(set);
    }
};
iv.setOnClickListener(l);
setContentView(iv);

答案 1 :(得分:0)

由于我无法修改他们的订单,我最终创建了两个单独的动画,并使用AnimationListener启动第二个动画。

答案 2 :(得分:0)

您只需添加设置属性元素android:repeatMode="reverse"即可。因此,您的代码应该是..

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/anticipate_overshoot_interpolator"
     android:repeatMode="reverse"
     >
  <translate
      android:repeatCount="infinite"
      android:fromXDelta="0"
      android:toXDelta="100%p"
      android:duration="2500"

     />
 <!--  <translate
      android:fromXDelta="-100%p"
      android:toXDelta="0"
      android:startOffset="500"
      android:duration="500"/> -->
</set>