1

次のコードを使用して、一連のターン (左または右) を作成しています。したがって、次々と呼び出すと、つまりturn(90); turn(90); turn(-90);、表示されるのは最後のものだけです。それらをすべて表示したいのですが、最初のものが完了するまで待ってから次へ進みます。何か案は?

public void turn(int i)
{

    RotateAnimation anim = new RotateAnimation( currentRotation, currentRotation + i,
                                                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
                                                currentRotation = (currentRotation + i) % 360;

    anim.setInterpolator(new LinearInterpolator());
    anim.setDuration(1000);
    anim.setFillEnabled(true);

    anim.setFillAfter(true);
    token.startAnimation(anim);
}
4

1 に答える 1

0

だから私がしたことは、アニメーションのキューとそれを実行するイテレータを作成することでした...実行する必要があるすべてのアニメーションを定義した後、それらをキューに追加し、最初のアニメーションを実行し、次に AnimationListener で処理しました残り。

Queue<RotateAnimation> que = new LinkedList<RotateAnimation>();
Iterator<RotateAnimation> queIt;


public void turnToken(int i){

    RotateAnimation anim = new RotateAnimation( currentRotation, currentRotation + i,
                                                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
                                                currentRotation = (currentRotation + i) % 360;

    anim.setInterpolator(new LinearInterpolator());
    anim.setDuration(1000);
    anim.setFillEnabled(true);
    anim.setAnimationListener(this);
    anim.setFillAfter(true);

    que.add(anim);
}

アニメーションリスナー:

@Override
public void onAnimationEnd(Animation arg0) {
    // TODO Auto-generated method stub

    if(queIt.hasNext()){
        token.startAnimation((Animation) queIt.next());
        }
}

@Override
public void onAnimationRepeat(Animation arg0) {
    // TODO Auto-generated method stub
}

@Override
public void onAnimationStart(Animation arg0) {
    // TODO Auto-generated method stub

}
于 2013-10-22T16:16:51.587 に答える