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呼び出しは、アニメーションをビューに設定した後onAnimationEndではなく、のメソッド内にないことに注意してください。AnimationListener

于 2012-06-20T16:31:51.883 に答える