1

過去数時間、アニメーションでドロップされたフレームをいくつか修正しようとしています。初めてアニメーションを実行するときは、最大5フレームをドロップします(同じビューでの後続のアニメーションは非常にスムーズです)。アニメーション中にハードウェアレイヤーを使用してみようと思いましたが、機能しませんでした(アニメーションに違いはありません)。ソフトウェアレイヤーを使用すると、フレームがドロップする問題が修正されます。

ただし、ソフトウェアレイヤーを使用すると、アニメーションはハードウェアレイヤーを使用する場合やレイヤーを使用しない場合(最初のアニメーションの後に遅れるアニメーション)ほどスムーズではないように感じます(科学的なテストはなく、頭の中にあるかもしれません)。もちろん)。

だから私はこれをどのように修正できるのか/私が間違っていることを疑問に思っています。初めてソフトウェアレイヤーを使用してアニメーションをレンダリングし、後続のアニメーションでレイヤーを無効にすることはできましたが、それは悪い回避策のようです。

これが私が使用するコードです:

    final View v = .....;

    v.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    v.buildLayer();

    ValueAnimator anim = ValueAnimator.ofFloat(0, 180);
    anim.setInterpolator(new AccelerateDecelerateInterpolator());
    anim.setDuration(250);
    anim.addUpdateListener(new AnimatorUpdateListener() {

        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            Float animatedValue = (Float) animation.getAnimatedValue();
            v.setRotation(animatedValue);
        }
    });
    anim.addListener(new AnimatorListenerAdapter() {

        @Override
        public void onAnimationEnd(Animator animation) {
            v.setLayerType(View.LAYER_TYPE_NONE, null);
        }
    });
    anim.start();
4

1 に答える 1