10

API レベル 19 が ObjectAnimators での pause() と resume() をサポートしていることは承知しています。しかし、API レベル 14 の私のプロジェクトでは、Image ビューに適用されて回転する ObjectAnimator があります。ObjectAnimator が提供するアニメーションをタッチ時に一時停止し、イメージビューがあった場所 (タッチダウン前) から再開したいと考えています。

そこで、現在の再生時間を保存して、stopAnimation() 関数でオブジェクト アニメーターをキャンセルしようとしました。

private void stopAnimation(){
        currentTime = mGlobeAnimator.getCurrentPlayTime();
        mGlobeAnimator.cancel();
    }

startAnimation() 関数では、アニメーターを再作成し、そのターゲットを画像ビューに設定し、保存された再生時間を設定して開始します。

private void startAnimation(Context context, View view, float startAngle) {
        ObjectAnimator globeAnimatorClone = (ObjectAnimator)AnimatorInflater.loadAnimator(context, R.animator.rotate_globe);
        globeAnimatorClone.setTarget(mImageView);
        globeAnimatorClone.setCurrentPlayTime(currentTime);
        globeAnimatorClone.start();
}

これは動作しません。19 より前の API レベルのアニメーターによって提供されたアニメーションを一時停止および再開するための指針を教えてください。

4

3 に答える 3

1

あなたがやっていることは、アニメーションを再開するだけです。代わりに、一時停止と再開メソッドを使用してアニメーションのカスタム クラスを作成できます。

最初に、デバイスが 19 API 以上であるかどうかを確認する必要があります。それから、オブジェクト アニメーターのネイティブの一時停止と再開を使用します。それ以外の場合は、API 1 から設計された通常のアニメーションを使用します。このスレッドに従って、 API 19 未満の一時停止と再開を行うことができます。

于 2014-08-10T18:50:58.343 に答える
0

おそらく私が答えるには遅すぎるでしょう。私はこの問題に遭遇したばかりで、あなたの方法で解決しました。私はあなたのアプローチに2つのことを追加しました 1.アニメーションの開始時に、** mCurrentPlayTime** がゼロより大きいかどうかを確認します。そうでなければ役に立たない。2. アニメーションが終了したら、再びゼロにします。

于 2016-01-13T09:09:12.217 に答える