【问题标题】:Animating two images one after the another一个接一个地为两个图像设置动画
【发布时间】:2015-05-04 22:14:52
【问题描述】:

我正在使用从左下角到上方的图像为两个布局设置动画。当我同时为这些图像设置动画时效果很好。但我想一个接一个地为它们设置动画。这意味着第一个底部布局将从左下角动画到顶部。然后其上面的布局将从左下到上进行动画处理。 为此,我尝试了下面的代码,但它没有按预期工作。我尝试使用 postDelayed() 方法为第二个图像设置动画。但首先我看到一个布局动画和第二个布局静态然后我看到两个图像动画。什么应该是正确的这样做的方法?

Handler fbanimation;
   bottomUp = AnimationUtils.loadAnimation(this,
                R.anim.loginbottomup);
ggin.setVisibility(View.VISIBLE);
ggin.startAnimation(bottomUp);

fbanimation.postDelayed(new Runnable() {
 @Override
public void run() {
afn.setVisibility(View.VISIBLE);
afn.startAnimation(bottomUp);

 }
},1000);

loginbottomup.xml

    <set 
        android:shareInterpolator="false">
        <translate android:fromXDelta="-300%" android:toXDelta="0%"
            android:fromYDelta="300%" android:toYDelta="0%"
            android:duration="1000"/>
    </set>

【问题讨论】:

  • 你知道animatorSet吗?检查这个post,这正是你所需要的。所以你所要做的就是把你的动画放在一个列表中,然后使用答案中的第一个选项,剩下的就交给安卓了
  • @Elltz 我希望名为“first”的图像视图首先制作动画,然后在其动画完成后,名为“第二”的图像视图制作动画。我该怎么做?参考 John D. 回答我必须将animation1 分配给firstanimation2 分配给second
  • 我看不到我的帖子是如何链接的,这两个答案都无法解决您的要求。将动画设置为视图并使用 animatorSet 播放动画,或者自定义方式,让第一个动画的侦听器在结束时启动第二个动画,这就是 Rod 提供的答案。先生,您是初学者吗?
  • @Elltz 是的,我是 freasher ..假设我想为两个名为 first 的 imagview.imageview 设置动画,首先进行动画处理,然后在其动画完成后,使用名为 second 的 imageview 进行动画处理。我可以用 AnimatorSet 做吗?参考 Joh 的回答,我如何将动画 1 分配给 first 和动画 2 分配给 second?请帮我写代码
  • 你试过我的方法了吗?

标签: android animation android-imageview


【解决方案1】:

您需要有一个名为 AnimationListener 的侦听器,将其附加到底部动画中,并在 onAnimationEnd 方法中的动画结束时运行下一个动画。

bottomUp.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {
       // run the next animation here
    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }
});

【讨论】:

  • 我希望名为“first”的图像视图首先制作动画,然后在其动画完成后,名为“第二”的图像视图制作动画。我该怎么做?
  • @BhuvneshVarma 为 2 个 imageview 创建 2 个animationUtils,然后像上面的示例一样附加animationlitener 并在onAnimationEnd 中创建另一个animationUtils 并运行它
  • 我试过你的回答。现在似乎也有一个问题。当我同时为两个布局设置动画时它工作正常。但如果我一个接一个地设置动画,布局似乎存在一些边距问题从顶部切入。我已经发布了有问题的布局代码
【解决方案2】:

研究使用AnimatorSet 类:

AnimatorSet animSet = new AnimatorSet();
animSet.play(animation1).after(animation2);
animSet.start();

Android Property Animation documentation 在这里也应该有很大的帮助。

【讨论】:

  • 我希望名为“first”的图像视图首先制作动画,然后在其动画完成后,名为“第二”的图像视图制作动画。我该怎么做?我必须将animation1 分配给@987654325 @ 和 animation2second
  • AnimatorSet 类使用 Animator 对象(与 Animation 对象相反),我发现它更易于使用,而不是在 XML 中定义动画。所以你可以使用 ObjectAnimator 类来创建你的 animator1 对象,然后将它们传递给 play() 和 after() 方法。
【解决方案3】:

这是您使用 AnimationSet 的代码示例。假设您有两个ImageViews,iv 在完成iv2 开始时开始和结束。

iv1 = (ImageView) findViewById(R.id.imageView1); //first image
iv2 = (ImageView) findViewById(R.id.imageView2); // second image
Animation iv1anim = AnimationUtils.loadAnimation(this, R.anim.abc_slide_out_bottom);
Animation iv2anim = AnimationUtils.loadAnimation(this, R.anim.abc_slide_in_bottom);
// the animations are in-built
iv1.setAnimation(iv1anim); // setting the respective anims
iv2.setAnimation(iv2anim);// setting the respective anims
iv1anim.setStartTime(0); // it will start quickly
iv2anim.setStartOffset(iv1anim.getDuration());// its going to delay,for the duration
// of the first image. in millieseconds,so there will be no seconds wait
final AnimationSet anim = new AnimationSet(false);
anim.addAnimation(iv1anim); // the rest is cheese
anim.addAnimation(iv2anim);
anim.startNow();

这就是你想要的对吧?希望它有帮助。 总是点赞,我喜欢点赞 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2013-04-25
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多