android中的animationSet()动画

use*_*861 12 animation android 2d

好的,这就是我在我的活动中有一个ImageView的问题,这是它在main.xml中的样子:

<ImageView  
android:id="@+id/ic"
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/icon"
android:layout_gravity="center_horizontal"/>
Run Code Online (Sandbox Code Playgroud)

我希望这个图像移动-200(左)然后移动到100(右)然后再回到0并具有弹跳效果.

我用我的代码实现了这个:

as = new AnimationSet(true);
as.setFillEnabled(true);
as.setInterpolator(new BounceInterpolator());

TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); 
ta.setDuration(2000);
as.addAnimation(ta);

AnimationSet sa = new AnimationSet(true);
sa.setFillEnabled(true);
sa.setInterpolator(new DecelerateInterpolator());

TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); 
ta2.setDuration(2000);
sa.addAnimation(ta2);

as.addAnimation(sa);
Run Code Online (Sandbox Code Playgroud)

你可以在代码中看到我想要的X转换(-300,100)然后(100,0)

然而,图像不会像它应该移动,而只是停在100然后弹跳...

嗯....你们知道出了什么问题或者我该怎么做才能做到这一点?

ser*_*zel 31

如果我没有误会,你就会拍摄一系列动画.

有趣的是,一旦你启动一个AnimationSet,所有添加的动画都是同时运行而不是顺序运行; 因此,您需要为第一个动画后面的每个动画设置setStartOffset(long offSet).

也许这样的事情会起作用......

as = new AnimationSet(true);
as.setFillEnabled(true);
as.setInterpolator(new BounceInterpolator());

TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); 
ta.setDuration(2000);
as.addAnimation(ta);

TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); 
ta2.setDuration(2000);
ta2.setStartOffset(2000); // allowing 2000 milliseconds for ta to finish
as.addAnimation(ta2);
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 17

我建议你使用ObjectAnimator.实现您的案例非常容易.您的动画可能如下所示:

ObjectAnimator animator1 = ObjectAnimator.ofFloat(targetView, "translationX", -200f);
animator1.setRepeatCount(0);
animator1.setDuration(1000);

ObjectAnimator animator2 = ObjectAnimator.ofFloat(targetView, "translationX", 100f);
animator2.setRepeatCount(0);
animator2.setDuration(1000);

ObjectAnimator animator3 = ObjectAnimator.ofFloat(targetView, "translationX", 0f);
animator3.setRepeatCount(0);
animator3.setDuration(1000);

//sequencial animation
AnimatorSet set = new AnimatorSet();
set.play(animator1).before(animator2);
set.play(animator2).before(animator3);
set.start();
Run Code Online (Sandbox Code Playgroud)

如果你不熟悉ObjectAnimator,可以查看这个android示例教程:

Android视图动画示例

  • ObjectAnimator是处理动画的一个很好的替代方法,但是,如果我没有记错的话,由于user724861在他/她的原始帖子中似乎正在使用它,因此ObjectAnimator不会给您setFillAfter或setFillEnabled的功能。 (2认同)