一个接一个地动画两个图像

时间:2015-05-04 22:14:53

标签: android animation android-imageview

我正在设置两个布局,其中包含从左下角到上方的图像。当我同时为这些图像设置动画时,它工作正常。但我想要一个接一个地动画它们。这意味着第一个底部布局将从左下角动画到顶部。然后它的上面的布局将从左下角动画到顶部。 为此,我尝试下面的代码,但它没有按预期工作。我尝试使用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>

3 个答案:

答案 0 :(得分:0)

您需要有一个名为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) {

    }
});

答案 1 :(得分:0)

使用AnimatorSet类:

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

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

答案 2 :(得分:0)

以下是使用AnimationSet的代码示例。假设您有两个ImageView 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();

你想要的是什么?希望它有所帮助。 总是upvote,我喜欢upvotes :)