2012-06-20 5 views
0

У меня есть ImageButton в android, который вращается при нажатии. Проблема заключается в том, что он не заканчивает вращение, когда пользователь удаляет его и переходит к новому действию на следующей строке. Я пробовал Thread.sleep(..) и wait(..), но положил RotateAnimation(..) вместе с этими фактически спит перед началом анимации.RotateAnimation не ждет, пока кнопка начнет вращаться перед запуском. Активность

мне нужна анимация на самом деле закончить, а затем приступить к startActivity(new Intent(..))

Вот код

amazingPicsButton.setOnClickListener(new View.OnClickListener() {   
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      amazingPicsSound = createRandButSound(); 
      amazingPicsSound.start();    
      rotateAnimation(v); 

      startActivity(new Intent("com.jasfiddle.AmazingInterface.AMAZINGPICS"));    
     } 
    });   
} 


/** function that produces rotation animation on the View v. 
* Could be applied to button, ImageView, ImageButton, etc. 
*/ 
public void rotateAnimation(View v){ 
    // Create an animation instance 
    Animation an = new RotateAnimation(30, 360, v.getWidth()/2, v.getHeight()/2); 

    // Set the animation's parameters 
    an.setDuration(20);    // duration in ms 
    an.setRepeatCount(10);    // -1 = infinite repeated 
    // an.setRepeatMode(Animation.REVERSE); // reverses each repeat 
    an.setFillAfter(true);    // keep rotation after animation 

    v.setAnimation(an); 
    // Apply animation to the View 

} 

ответ

0

Анимация представляет собой асинхронный процесс, поэтому, если вы хотите анимации закончить прежде, чем продолжить, то вам необходимо добавить анимацию слушателя и выполнить свою следующую строку кода, когда анимация завершается :

amazingPicsButton.setOnClickListener(new View.OnClickListener() {   
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     amazingPicsSound = createRandButSound(); 
     amazingPicsSound.start(); 
     rotateAnimation(v); 
    } 
});   

, а затем

public void rotateAnimation(View v){ 
    // Create an animation instance 
    Animation an = new RotateAnimation(30, 360, v.getWidth()/2, v.getHeight()/2); 

    // Set the animation's parameters 
    an.setDuration(20);    // duration in ms 
    an.setRepeatCount(10);    // -1 = infinite repeated 
    // an.setRepeatMode(Animation.REVERSE); // reverses each repeat 
    an.setFillAfter(true);    // keep rotation after animation 

    an.addAnimationListener(new AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) {} 

      @Override 
      public void onAnimationRepeat(Animation animation) {} 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       startActivity(new Intent("com.jasfiddle.AmazingInterface.AMAZINGPICS")); 
      } 
     }); 

    v.setAnimation(an); 

} 

Примечание что startActivity вызов не внутри метода onAnimationEndAnimationListener, а не после установки анимации на представление.

Смежные вопросы