在过去的几个小时里,我一直在尝试修复动画中的几个丢帧。第一次运行动画时,我丢弃了~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();
将图层设置为 HARDWARE
实际上应该会大大提高动画的平滑度。如果在模拟器中测试应用,请在虚拟设备设置中选中"使用主机 GPU",以受益于硬件加速。