如何在一些间隔android之后逐个动画多个对象

时间:2013-11-09 05:41:50

标签: android animation android-animation

如何在一些间隔android之后逐个动画多个对象 我正在使用此代码进行动画

 for (int y = 0; y < 10; y++) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                }
                Toast.makeText(ProjectFirstActivity.this, y + "",
                        Toast.LENGTH_SHORT).show();
                ObjectAnimator oa = ObjectAnimator.ofFloat(myimageview[y],
                        "translationY", 0, -200);
                oa.setDuration(1000);
                oa.start();
            }
        });
    }

但它一气呵成,但我希望逐一动画我的imageview请帮助

5 个答案:

答案 0 :(得分:7)

无需使用线程和处理程序。而不是那种用途,

objectAnimator.setStartDelay(delay);

使用它可以停止相应'延迟'的动画

试试这段代码..

  int delay = 1000;
  for (int y = 0; y < 10; y++) {                         
      Toast.makeText(ProjectFirstActivity.this, y + "",
                    Toast.LENGTH_SHORT).show();
      ObjectAnimator oa = ObjectAnimator.ofFloat(myimageview[y],
                    "translationY", 0, -200);
      oa.setDuration(1000);
      oa.setStartDelay(delay);
      oa.start();
      delay = delay+1000;
   }

答案 1 :(得分:0)

试试这种方式!

public Integer[] Imgid = {R.drawable.anim2, R.drawable.anim3,
            R.drawable.anim4, R.drawable.anim5}; // your image array.
    Animation anim;
    Handler handler;
    ImageView iv;
    int count;
    Runnable galleryAnimRunnable;

在onCreate

iv= (ImageView)findViewById(R.id.imagetype);
handler = new Handler();

   galleryAnimRunnable = new Runnable() {
    public void run() {

        if(count==Imgid.length){
            //do any action
        }
        else{
            anim = AnimationUtils.loadAnimation(AnimationScreen.this, R.anim.fade_out); // load your desire animation.
            iv.setBackgroundResource(Imgid[count]);
            iv.setAnimation(anim);
            count++;
            handler.postDelayed(galleryAnimRunnable, 300); //set your desire delay time.
        }

    }
};

答案 2 :(得分:0)

您的sleep来电没有帮助,因为当一个已发布的U​​I作业进入休眠状态时,下一个就会启动并在此之后立即进入休眠状态,依此类推。然后第一份工作醒来并运行,紧接着是第二份工作觉醒和运行等等。

如果您希望sleep帮助您在发布每个作业之前需要等待,这可能就像下面这样简单:

for (int y = 0; y < 10; y++) {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
    }
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(ProjectFirstActivity.this, y + "",
                    Toast.LENGTH_SHORT).show();
            ObjectAnimator oa = ObjectAnimator.ofFloat(myimageview[y],
                    "translationY", 0, -200);
            oa.setDuration(1000);
            oa.start();
        }
    });
}

编辑:虽然上面解释了你遇到问题的原因,但我建议你选择Jgdsh Seerm使用setStartDelay()发布的答案。

答案 3 :(得分:0)

试试这种方式!

ImageView image1;
public int currentimageindex1=0;
Timer timer;
TimerTask task;

private Animation animation1;
private Animation animation2;

int img[] = {R.drawable.aa, R.drawable.bb, 
        R.drawable.cc,R.drawable.dd,R.drawable.ee,R.drawable.ff,R.drawable.gg,
        R.drawable.hh};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Handler mHandler = new Handler();

    // Create runnable for posting
    final Runnable mUpdateResults = new Runnable() {
        public void run() {

            AnimateandSlideShow();

        }
    };

    int delay = 1000; // delay for 1 sec.

    int period = 4000; // repeat every 4 sec.

    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

    public void run() {

         mHandler.post(mUpdateResults);

    }

    }, delay, period);



}

public void onClick(View v) {

    finish();
    android.os.Process.killProcess(android.os.Process.myPid());
  }

/**
 * Helper method to start the animation on the splash screen
 */
private void AnimateandSlideShow() {

    image1 = (ImageView)findViewById(R.id.imageView1);


    image1.setImageResource(img[currentimageindex1%img.length]);
    currentimageindex1++;


}

答案 4 :(得分:0)

您可以使用for循环生成<?php session_start(); session_destroy(); header("Location:login.php"); ?> ,然后使用AnimatorSet

顺序播放它们

我还没有在下面提到的代码段中使用过列表。

set.playSequentially(yourAnimatorSetListHere);