在android中使用animationSet()制作动画
好的,问题出在这里 我的活动中有一个ImageView,下面是它在main.xml中的外观:在android中使用animationSet()制作动画,android,animation,2d,Android,Animation,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"/> 您可以在代码处看到我想要的
<ImageView
android:id="@+id/ic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon"
android:layout_gravity="center_horizontal"/>
您可以在代码处看到我想要的X转换(-300100),然后是(100,0)
然而,图像并没有像它应该的那样移动,而是在100处停止,然后反弹
嗯…,你们知道哪里不对,或者我应该怎么做才能做到吗?如果我没弄错的话,你们是在拍摄一系列动画 有趣的是,一旦启动动画集,所有添加的动画将同时运行,而不是按顺序运行;因此,需要为第一个动画之后的每个动画设置StartOffset(长偏移) 也许像这样的东西会有用
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);
在3.0及更高版本中,类似的操作非常简单。这里有两个链接,我用来完成类似的事情
我建议您使用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();
如果您不熟悉ObjectAnimator,可以查看以下android示例教程:
ObjectAnimator是处理动画的一个很好的选择,但是,如果我没有弄错的话,ObjectAnimator不会为您提供设置FillAfter或设置FillEnabled的功能,因为用户724861在其原始帖子中似乎正在使用它。
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();