過去数時間、アニメーションでドロップされたフレームをいくつか修正しようとしています。初めてアニメーションを実行するときは、最大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();