11

10本くらいのアニメーションを次々と再生する作業をしているのですが、アニメーションごとに最後にチェックする条件があり、animation setやsetStartDelayが使えません。

Jelly Bean では、実験として withEndAction という新しいメソッドを使用して非常に簡単に実行できることがわかりましたが、今は minSdk 10 を使用してアプリに実装する必要があります。

私は Nine Old Android を使用しており、うまく機能しますが、setListner を使用するのは非常に難しく、10 の連続するアニメーションを維持するのが難しいコードが作成されます。

だから私は、9つの古いアンドロイドから継承するアダプターを作成し、ランナブルを実行する withEndAction 関数を追加できると考えていましたか?

誰かがそれを行う方法を教えてもらえますか?これを行うより良い方法はありますか?

ありがとう

4

6 に答える 6

7

ViewCompat必要なアニメーションを使用して追加できるようになりました。

ViewCompat.animate(yourView).scaleY(3).withEndAction(yourRunnable).start();
于 2016-11-15T04:39:20.093 に答える
0

私が考えることができる2つのオプションがあります:

  1. ファサード パターンを使用して独自のアニメーション プールを作成します (これは大変な作業になる可能性があります)。
  2. ADT からソース コードを取得し、それを変更します。見つからない場合は、http://pastebin.com/9nCPC4aRをご覧ください。ViewPropertyAnimatorCompat独自のパッケージにコピーします(のようなもの)。このクラスは、他の Android のものとあまり結合していないように見えるので、そのまま動作するはずです :)
  3. 更新:ここに別のオプション、アニメーション キューがあります。最初のアイデアに似ていますが、もう少し簡単です。

コード:

public class AnimationQueue extends LinkedList<Animation> implements
    AnimationListener {

private View mView;

public static AnimationQueue ready(Animation... animations) {
    AnimationQueue queue = new AnimationQueue();
    for (Animation animation : animations) {
        queue.add(animation);
    }
    return queue;
}

public AnimationQueue steady(View view) {
    mView = view;
    return this;
}

public void go() {
    Animation animation = poll();
    animation.setAnimationListener(this);
    mView.startAnimation(animation);
}

@Override public void onAnimationEnd(Animation animation) {
    go();
}

@Override public void onAnimationStart(Animation animation) {
}

@Override public void onAnimationRepeat(Animation animation) {
}

}

使用法:

AnimationQueue.ready(anim1, anim2, anim3).steady(view).go();

乾杯

于 2013-01-14T10:33:19.727 に答える
0

私はより良い解決策があると思います:

            view.animate().setDuration(2000).alpha(0);
            //timAnimDelay.purge();
            timAnimDelay.schedule(new TimerTask() {
                @Override
                public void run() {

                    // on UI thread
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // here animation
                        }
                    });
                }
            // delay start
            } , 2000);
            timAnimDelay.purge();
于 2013-05-31T13:21:06.707 に答える
0

私の解決策は、素晴らしいnineoldandroidsも使用していました

それ以外の

starsBig[4].animate().rotation(3600).setDuration(2000).withEndAction(runnable)

やった

animate(starsBig[4]).rotationBy(3600).setDuration(2010);
this.runOnUiThread(new Runnable() {
public void run() {
    for (int i = 0; i < 5; i++) {
        starReset(stars[i]);
        starReset(starsBig[i]);
    }
           }
});

1つのアニメーションでうまくいきました

于 2013-01-17T18:15:01.057 に答える