1

Androidアプリがあり、そのアプリで「L」字型のボールのグラフィックをアニメーション化するとします。これには、アニメーションxmlファイル(以下に記述)を作成し、それをボールグラフィックを含むビューに適用するTweenアニメーションを定義する必要があります。

<translate>
Ydelta = 20;
offset = 0;
duration = 100;
</translate>

<translate>
Xdelta = 20;
offset = 100;
duration = 100;
</translate>

ここで、このアニメーションの速度を動的に制御して、時間の経過とともにLアニメーションがどんどん速くなるようにしたいとしましょう。このアニメーション全体の速度を動的に制御するにはどうすればよいですか?myAnimation.setDuration($ var)を試しましたが、これはアニメーションの最初の部分でのみ機能するようです。オフセットが0より大きいアニメーションの部分では、setDuration()メソッドによって継続時間が調整されません。

multi-setpアニメーションを均一にスケーリングする方法を知っている人はいますか?

ありがとう

ps-2つの部分からなるアニメーションを作成し、各部分を個別にスケーリングしたり、コードを使用してアニメーションを生成したりするなど、これを解決する方法があることは知っていますが、より簡単な解決策がある場合は、それが望ましいでしょう。

4

1 に答える 1

8

私はこれを自分で解決しました。setDuration();アニメーション全体をスケーリングするには、アニメーションをプログラムで作成する必要があります。また、xml でハードコーディングするのではなく、変数を使用してアニメーションの継続時間を設定する必要があります。

これで、アニメーションを呼び出すたびに、アニメーションの長さを渡してmAnimDuration、新しい時間スケールのアニメーションをオンザフライで作成します。アニメーションの 2 番目の部分のオフセットが、アニメーションの最初の部分の長さに設定されていることがわかります。

これが私のコードの例です:

AnimationSet rootSet = new AnimationSet(true);

TranslateAnimation transX = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, 0,0,0,0);
transX.setStartOffset(0);  
transX.setDuration(mAnimDuration/2);  
rootSet.addAnimation(transX);

TranslateAnimation transX2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, 0,0,0,0);  
transX2.setStartOffset(mAnimDuration/2);  
transX2.setDuration(mAnimDuration/2);  
rootSet.addAnimation(transX2);
于 2010-09-21T06:00:34.187 に答える