0

我有一个ImageButton在点击时旋转的android。问题是当用户点击它并继续到下一行的新活动时,它没有完成旋转。我已经尝试过Thread.sleep(..)wait(..)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

}
4

2 回答 2

0

您永远不会要求您的应用程序等待动画结束以启动新活动。见http://developer.android.com/reference/android/view/animation/Animation.html#setAnimationListener(android.view.animation.Animation.AnimationListener)

学习如何使用AnimationListener

于 2012-06-20T16:31:15.833 回答
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调用不在 theonAnimationEnd方法内部,AnimationListener而不是在将动画设置到视图之后。

于 2012-06-20T16:31:51.883 回答