1

以下のように、持続時間が異なる 2 つのアニメーションがあります: アニメーション
1:

    TranslateAnimation trans1 = new TranslateAnimation(0, 0, 0, 500);  
    trans1.setStartOffset(0);  
    trans1.setDuration(5000);  
    trans1.setFillAfter(true);  

アニメーション 2:

    TranslateAnimation trans2 = new TranslateAnimation(0, -100, -200, -200);  
    trans2.setDuration(200);  
    trans2.setRepeatCount(25);  
    trans2.setFillAfter(true);  

ご覧のとおり、これらのアニメーションの持続時間は異なります。Y:0から500までの1回のAnim1(デュレーション5000)のアニメーション中に、Anim2(デュレーション200)を25回ループでアニメートしたいと思います。

AnimationSet と addAnimation を試してみましたが、うまくいきません。この問題を解決する方法を教えてください。

私のコード:

AnimationSet rootSet = new AnimationSet(true);   
rootSet.setInterpolator(new AccelerateInterpolator());  
rootSet.setRepeatMode(Animation.INFINITE);  
rootSet.setRepeatCount(200);  
rootSet.setDuration(5000);  
rootSet.setFillAfter(true);  

    TranslateAnimation trans1 = new TranslateAnimation(0, 0, 0, 500);  
    trans1.setStartOffset(0);  
    trans1.setDuration(5000);  
    trans1.setFillAfter(true);  

rootSet.addAnimation(trans1);


AnimationSet rootSet2 = new AnimationSet(true);  
rootSet2.setInterpolator(new AccelerateInterpolator());  
rootSet2.setRepeatMode(Animation.INFINITE);  
rootSet2.setRepeatCount(200);  
rootSet2.setDuration(200);  

    TranslateAnimation trans2 = new TranslateAnimation(0, -100, -200, -200);  
    trans2.setDuration(200);
    trans2.setRepeatCount(25);
    trans2.setFillAfter(true);

rootSet2.addAnimation(trans2);  

rootSet.addAnimation(rootSet2);  

iv.startAnimation(rootSet);  

編集:
trans2アニメーションのみを再生すると、必要に応じて(水平方向に)25回繰り返されます。さらに、このアニメーションを垂直方向(trans1)でアニメーション化(イメージビューだけでなく水平方向のアニメーション全体)したいと考えています。

この説明がより明確になることを願っています。

これら 2 つのアニメーションを 1 つの AnimationSet に追加すると、最初のアニメーションはまったく機能せず、imageview (animationn ではない) は -200,500 に線形に変換されます。

4

1 に答える 1

0

今、私はあなたが何をしたいのかがわかります。「行」ごとに 1 つずつ、複数のアニメーションを実行する方がよいでしょう。AnimationListener前のアニメーションがいつ終了するかを知るを追加し(onAnimationEndコールバック)、1 行下にジャンプして、再び右から左に移動します。

これらはすべて基本的に同じで、アニメーションごとにfromYDeltaとの値が変わるだけです。toYDelta

于 2012-12-06T22:35:20.987 に答える